簡體   English   中英

使用基類構造函數初始化子類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM