2012-04-16 40 views
5

考虑一类瓦尔多,从Foo和巴兹,即:这是否工作? C++多重继承和构造函数链

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

当我创建金都的新实例继承:

Waldo *w = new Waldo; 

做Foo和Baz构造函数被调用?如果它们不是默认调用的,在Waldo构造函数的类声明或声明/定义中是否有简单的方法来强制它们被调用?

(它看起来像我可能会尝试做构造链接,和C++据称没有做到这一点。我不知道。)

我试图做的是“注解”的各种类声明,其中注释导致(除其他之外)注释类的实例被链接到由注释类维护的列表中。例如,这让我用Baz-nature遍历所有对象的列表,对它们应用特定的操作,而不必担心是否记住将实例添加到具有Baz-nature的对象列表中,因为构造函数自动完成它。

+1

注意:在这里使用'new'是虚假的,您可以完美地说'Waldo w''和一个实例沃尔多将被创建。 – 2012-04-16 16:08:59

回答

1

类的所有成员的构造函数按照在类中声明的顺序调用。

派生类的默认构造函数默认调用基类的构造函数。如果他们需要参数,他们需要明确调用,否则它是一个错误...

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

好的,详细的答案和解释。谢谢! – 2012-04-17 02:36:43

7

是的,他们被称为。左到右。