注意:不是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