我有一个项目,其中有许多相关的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;
}

08-26 06:23