5

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

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

当我创建一个新的 Waldo 实例时:

   Waldo *w = new Waldo;

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

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

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

4

2 回答 2

7

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

于 2012-04-16T14:48:48.550 回答
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..
     //...
  };
于 2012-04-16T15:39:16.430 回答