[英]Using base class constructor to initialize child class
所以我有一個基類Base和幾個子類。 我想做的是有一個基類構造函數,它基於字符串參數創建一個子類,例如:
Base:Base(string class_name) {
switch(class_name) {
case "something":
*this = SomeChildClass(...);
...
}
}
它可以編譯並運行,但是對象不具有子類的特征,我也不知道為什么。 這不行嗎?
您不能在構造函數中執行此操作,因為構造函數始終會構造特定類型的對象。 但是,使用工廠函數執行此操作是很常見的模式,也許像這樣:
class Base
{
public:
static std::unique_ptr<Base> create(const std::string &class_name) {
if (class_name == "something") {
return std::make_unique<SomeChildClass>();
}
}
};
請注意,通常,多態需要動態對象分配(或某些非常特定的方案),因此將唯一指針作為返回類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.