【问题标题】:Does this work? C++ multiple inheritance and constructor chaining这行得通吗? C++ 多重继承和构造函数链接
【发布时间】:2012-04-16 14:47:05
【问题描述】:

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

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

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

   Waldo *w = new Waldo;

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

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

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

【问题讨论】:

  • 注意:这里使用new 是虚假的,你可以完美地说Waldo w; 并且会创建一个Waldo 的实例。

标签: c++ constructor multiple-inheritance


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    派生类的默认构造函数默认调用基类的构造函数。如果它们需要参数,则需要显式调用它们,否则会出错...

     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..
         //...
      };
    

    【讨论】:

    • 好,详细的答案和解释。谢谢!
    猜你喜欢
    • 2014-06-18
    • 2012-04-24
    • 2018-10-10
    • 2015-03-24
    • 2014-08-21
    • 2012-11-14
    • 2011-07-06
    • 2017-12-05
    • 2018-06-28
    相关资源
    最近更新 更多