Sanal temel sınıfın bir nesnesini geri getirebilmeyi diliyorum, böylece bellek yönetimi ile uğraşmaya gerek kalmayacak (fonksiyon programlaması fikri de bu arayışı tetikler). Ancak, arayüz tasarımında her zaman bir işaretçi sınıfına geri dönmelidir?
class Car
{
public:
virtual int price() = 0 ;
virtual string brand() = 0 ;
}
class Interface
{
public:
virtual Car giveMeACar() = 0 ;
virtual vector<Car> listMeAllTheCars() = 0 ;
}
, bu bile Araba soyut arayüz nedeniyle derlemek olmaz, bir hata mesajı ile:
geçersiz soyut dönüş tipi Ben aşağıda gibi bazı şeyler arıyorum anlamına gelir üye fonksiyon '
virtual Car giveMeACar() = 0
; Aşağıdaki sanal işlevler , 'Car
' içinde '
string brand()
; Akıllı işaretçi kullanma seçeneği dışarı iktidar -
Yani, (kullandıktan sonra örneğini silme) Kendim altında ve yöneticisi hafıza gibi revize etmek şeye arayüze sahip demektir yapar.
class Interface
{
public:
virtual Car* giveMeACar() = 0 ;
virtual vector<Car*> listMeAllTheCars() = 0 ;
}
Sorum şu: Bu elimdeki tek seçenek olduğunda tasarım her şey (sınıfı) soyut bir arayüz?
Arabirim sınıfının bir nesnesinin döndürülmesi, Java'da mükemmel geçerlidir. C++, bu faset içinde çöp bitleri ve sayaçları sezgisel gibi görünüyor. Çoğu zaman, C++ 'nun bir "nesne programlama dili" yerine "programlama dilini nesneye yönlendirmesi" olduğunu hissediyorum; çünkü bir işaretçi olmadan, nesne programlamasının çok fazla faydası olmaz.
Sanal işlevler yapmak için +1 özel: – Chubsdad
@chubsdad : Neden? Bu benim niyetim değil ... Ben kamu – pierrotlefou
-1 kullanmış olmalı, sonra Sanal Sanal Arayüz deyimine bakın. Örneğin, ortak yöntemler sanalysa, arabirimlerinizin sınırlarında değişmezleri uygulayamazsınız. –