我有一个项目,其中有许多相关的Info类,并且我正在考虑建立一个层次结构,方法是先创建一个AbstractInfo类,然后再创建一堆派生类,并在必要时覆盖AbstractInfo的实现。但是事实证明,在C++中使用AbstractInfo类然后创建派生对象之一并不是那么简单。 (请参阅this问题,对最后一个答案发表评论)
我打算像工厂类一样创建一个类,该类创建一个Info对象,并始终返回AbstractInfo对象。我从C#知道可以使用接口(interface)来做到这一点,但是在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;
}