簡體   English   中英

c ++:動態選擇要創建的子類

[英]c++: Dynamically choose which subclass to create

我是c ++的新手,我有一個問題。

假設我們有一個基類Base和兩個派生類Derived1和Derived2。 fe Derived1有一個帶整數的構造函數,Derived2有一個帶布爾值的構造函數。

是否有可能在運行時(或在編譯時)確定要創建這兩個子類中的哪一個並將其分配給Base類。

像這樣:Base b = ???(value),其中value是integer或boolean類型。

提前致謝!

寫一個名為createMyBlaBla的函數的兩個重載。 一個接受int ,另一個接受bool 每個人都返回所需的派生類類型。 例如:

Base* create(int n)
{
    return new Derived1(n);
}
Base* create(bool b)
{
    return new Derived2(b);
}
....
Base* b1 = create(10);    // Derived1
Base* b2 = create(false); // Derived2

人們稱之為工廠模式。

您可能想要工廠設計模式

我真的不認為這可能是你想要它的方式,C ++中的多態性就是這樣。

如果我理解得很好,你想要一個聲明為Base的變量決定,取決於參數類型,它是否將是Derived1或Derived2,所有這些都不使用Factory模式。

這是不可能的原因是, Base類並不真正意識到它的Derived類的存在,也不能聲明一個堆棧變量並使其“行為”作為派生類。 但是,我可以建議一個解決方法,但是再次,這不能滿足你想要的真正的類層次結構的所有期望(如果你真的想要它那樣:

class Facade{

public:
    Facade(int foo) : b(new Derived1(foo)){}

    Facade(bool foo) : b(new Derived2(foo)){}

    Base Value()
    {
        return *b;
    }

private:
    Base* b;

};

然后你可以這樣做:

Facade foo(10);
Facade bar(true);

int x = (reinterpret_cast<Derived1*>(foo.Value())) -> val;
bool y = (reinterpret_cast<Derived2*>(bar.Value())) -> val;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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