多个构造函数继承

Multiple constructor inheritance

本文关键字:继承 构造函数      更新时间:2023-10-16

我正在尝试创建两个可以单独调用的较小的构造函数,然后创建一个更大的构造函数,允许您通过简单地调用其他两个构造函数来一次执行所有操作。

我的代码示例:

Foo::Foo(bool someVar, int someOtherVar, int fooBar) : Foo(someOtherVar, fooBar), Foo(someVar) {}
Foo::Foo(bool someVar) { this->_someVar = someVar; }
Foo::Foo(int someOtherVar, int fooBar) { this->_someOtherVar = someOtherVar + fooBar; }

我从中得到

In constructor 'Foo::Foo(bool, int, int)': error: mem-initializer for 'class Foo::Foo' follows constructor delegation Foo(someOtherVar, fooBar), Foo(someVar) { }

有什么问题吗?

如果你委托给构造函数,这是你在初始化列表中唯一能做的事情。从[class.base.init]/6:

mem-initializer-list可以使用任何class-or-decltype将其委托给构造函数类的另一个构造函数。它表示构造函数的类本身。如果mem-initializer-id指定构造函数的类,它应该是唯一的mem-initializer;

所以这是非法的:

Foo::Foo(bool someVar, int someOtherVar, int fooBar) 
    : Foo(someOtherVar, fooBar)
    , Foo(someVar) //<== second mem-initializer is not allowed
{}

不能这样调用同一个类的两个构造函数。编写一个构造函数完成所有初始化,然后编写另外两个构造函数调用该构造函数并传递一些参数和一些默认值。