我想注入一些基本的信息到它可以構建的派生類中。派生類不應該關心初始化這些信息,它應該在那裏。有沒有辦法從基礎實例創建派生實例?
通過繼承可以輕鬆實現。但問題是基類不知道它自己的值。相反,他們需要作爲參數傳入。但是,由於派生類不需要考慮這一點,因此通過派生構造函數對參數進行隧道傳輸,而該構造函數使用它構造基礎構造函數是沒有選擇的。
我能想到的唯一解決方案是使信息靜態可用,以便基類可以在沒有幫助的情況下得到它們。但我想避免這種情況。
是否有某種方式首先創建並初始化基類,然後將實例擴展爲派生類型?如果沒有,我怎樣才能使用C++的可用特性來實現創建和依賴的順序?
#include <string>
#include <iostream>
using namespace std;
class Base {
public:
Base(string name, int age) : name(name), age(age) {}
protected:
const string name;
int age = 0;
};
class Derived : public Base {
Derived() { // No parameters here, no call to base constructor
cout << "My name is " << name << " and I'm " << age << "." << endl;
}
}
Base base("Peter", 42);
Derived derived(base); // "My name is Peter and I'm 42."
你的「沒有調用基礎構造函數」讓我回答:不。這不是C++的工作原理。 – Quentin 2014-09-02 21:21:41
TL; DR; [原型模式](http://sourcemaking.com/design_patterns/prototype)可能有助於您的使用案例。 – 2014-09-02 21:21:54