2012-04-16 30 views
5

Foo ve Baz, yani .:Bu işe yarıyor mu? C++ çoklu kalıtım ve

class Waldo : public Foo, public Baz { 
    ... 
}; 

Ben yeni Waldo örneğini oluşturduğunuzda devraldığı bir sınıf Waldo, düşünün zincirleme yapıcı:

Waldo *w = new Waldo; 

do Foo ve Baz yapıcılar aranıyor mu? Varsayılan olarak çağrılmıyorlarsa, SINIR BILGISAYARINDA VEYA DAVRANIŞLARININ TANIMI/TANIMINDA, çağrılacaklarını zorlamak için kolay bir yol var mı?

(Ben yapıcı zincirleme yapmaya çalışıyor olabilir ve C++ iddia yapmaz gibi görünüyor. Emin değilim.)

Ne yapmaya çalışıyorum çeşitli sınıf "açıklama" dır ek açıklamaların (diğer şeylerin yanı sıra) açıklamalı sınıfın örneklerinin ek açıklama sınıfları tarafından korunan listelere bağlanmasına neden olduğu bildirimler. Bu, örneğin, Baz-doğa ile tüm nesnelerin listesini yürütebilir, onlara belirli bir işlem uygular ve vakayı Baz-doğa ile nesnelerin listesine eklemeyi hatırlayıp hatırlamadığım konusunda endişelenmeme gerek yok. kurucu bunu otomatik olarak yaptı.

+1

Not gerekir: Burada new' 'kullanımı sahte, sen mükemmel' w Waldo söyleyebiliriz; 've bir örneğinin Waldo yaratılacaktı. –

cevap

1

Bir sınıfın tüm üyelerinin kurucuları, sınıfta bildirildikleri sırayla çağrılır.

Türetilmiş sınıfların varsayılan yapıcıları, varsayılan olarak temel sınıf yapıcılarını çağırır. Onlar argümanlar gerekiyorsa, onlar ... Bu bir hatadır açıkça başka çağırılacak

class Employee { 
private: 
    // 
public: 
    Employee(); 
    //... 
}; 



class Manager: public Employee { 
private: 
    short level; 
public: 
    Manager(): Employee(), level() {} // This is the default constructor, it calls Employee(). 
    // The definition is equivalent to default constructor of Manager.. 
    //... 
    }; 
+0

İyi, detaylı cevap ve açıklama. Teşekkür ederim! –

7

Evet, aradılar. Soldan sağa.