c ++工厂和铸造问题

Ton*_*ion 2 c++ polymorphism factory casting

我有一个项目,我有很多相关的Info类,我正在考虑通过使用AbstractInfo类和一堆派生类来构建层次结构,根据需要覆盖AbstractInfo的实现.然而事实证明,在C++中使用AbstractInfo类然后创建一个派生对象并不那么简单.(见这个问题,评论最后的答案)

我打算创建一个工厂类,它创建一个Info对象并始终返回一个AbstractInfo对象.我从C#中知道你可以用接口做到这一点,但是在C++中看起来有些不同.

向下铸造变得复杂,似乎容易出错.

有没有人对我的问题有更好的建议?

Nav*_*een 5

您不需要向下转发.看这个例子:

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)