我新的C ++和我有一个问题。

假设我们有一个基类基和两个派生类,Derived1和Derived2的。 F.E. Derived1有一个构造采取整数和Derived2的一个构造采取一个布尔值。

是否有可能在运行时确定(或在编译时间),其这两个亚类的产生,并将其分配到的基类。

像这样: 基B = ???(值),其中值是整型或布尔值。

提前感谢!

有帮助吗?

解决方案

您可能想工厂设计模式

其他提示

写入被叫createMyBlaBla函数的两个重载。一个接受int,另一个接受bool。大家返回所需的派生类型。 e.g:

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 ++只是不工作是这样的。

如果我深知,想要一个变量声明为基础确定, 根据参数的类型,它是否会是Derived1或 Derived2的,所有不使用工厂模式。

之所以这是不可能的是,在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归因
不隶属于 StackOverflow
scroll top