Ton*_*ion 2 c++ polymorphism factory casting
我有一个项目,我有很多相关的Info类,我正在考虑通过使用AbstractInfo类和一堆派生类来构建层次结构,根据需要覆盖AbstractInfo的实现.然而事实证明,在C++中使用AbstractInfo类然后创建一个派生对象并不那么简单.(见这个问题,评论最后的答案)
我打算创建一个工厂类,它创建一个Info对象并始终返回一个AbstractInfo对象.我从C#中知道你可以用接口做到这一点,但是在C++中看起来有些不同.
向下铸造变得复杂,似乎容易出错.
有没有人对我的问题有更好的建议?
您不需要向下转发.看这个例子:
class AbstractInfo
{
public:
virtual ~AbstractInfo() {}
virtual void f() = 0;
};
class ConcreteInfo1 : public AbstractInfo
{
public:
void f()
{
cout<<"Info1::f()\n";
}
};
class ConcreteInfo2 : public AbstractInfo
{
public:
void f()
{
cout<<"Info2::f()\n";
}
};
AbstractInfo* createInfo(int id)
{
AbstractInfo* pInfo = NULL;
switch(id)
{
case 1:
pInfo = new ConcreteInfo1;
break;
case 2:
default:
pInfo = new ConcreteInfo2;
}
return pInfo;
}
int main()
{
AbstractInfo* pInfo = createInfo(1);
pInfo->f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)