注意:不是C++ 11 Delegated Constructor Pure Virtual Method & Function Calls -- Dangers?的重复。这个其他问题是指一个概念上类似的问题,并不真正为这种情况提供解决方案。C++ 11构造函数的继承和纯虚方法
考虑下面的程序:
#include <iostream>
using std::cout;
using std::endl;
class Base {
virtual void init() = 0; // a hook function
public:
Base(int a, int b) { /* ... */ init(); }
Base(char a, int b) { /* ... */ init(); }
Base(char a, int b, double* c) { /* ... */ init(); }
/* etc. Dozens of constructors */
};
class Derived1 : public Base {
void init() { cout << "In Derived1::init()" << endl; }
public:
using Base::Base;
};
class Derived2 : public Base {
void init() { cout << "In Derived2::init()" << endl; }
public:
using Base::Base;
};
int main() {
Derived1 d1(1, 2);
Derived2 d2('a', 3);
return 0;
}
此代码显然不能运行(尽管它带有警告编译一些编译器)。问题是,实现这种模式的最好方法是什么?假设Base中有几十个派生类和几十个构造函数,重新实现派生类中的Base构造函数(在派生构造函数的主体中调用基础构造函数和init())并不是很理想。
我建议删除许多换行符和空的注释,以便更容易理解在类似的小浏览器窗口中找到完整的代码。 – dornhege