题
我新的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;
不隶属于 StackOverflow