这有用吗? C ++多重继承和构造函数链接

时间:2012-04-16 14:47:06

标签: c++ constructor multiple-inheritance

考虑一个继承自Foo和Baz的Waldo类,即:

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

当我创建Waldo的新实例时:

   Waldo *w = new Waldo;

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

(看起来我可能正在尝试进行构造函数链接,据说C ++不这样做。我不确定。)

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

2 个答案:

答案 0 :(得分:7)

是的,他们被召唤了。从左到右。

答案 1 :(得分: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..
     //...
  };