【问题标题】:Create object of unknown class (two inherited classes)创建未知类的对象(两个继承的类)
【发布时间】:2010-04-27 16:45:30
【问题描述】:

我有以下课程:

class A {
    void commonFunction() = 0;
}

class Aa: public A {
    //Some stuff...
}

class Ab: public A {
    //Some stuff...
}

根据用户输入,我想创建一个 Aa 或 Ab 的对象。我的初衷是这样的:

A object;
if (/*Test*/) {
    Aa object;
} else {
    Ab object;
}

但是编译器给了我:

error: cannot declare variable ‘object’ to be of abstract type ‘A’
because the following virtual functions are pure within ‘A’:
//The functions...

有什么好办法解决这个问题吗?

【问题讨论】:

  • 你的基类也需要一个虚拟析构函数。

标签: c++ class inheritance


【解决方案1】:

使用指针:

A *object;
if (/*Test*/) {
    object = new Aa();
} else {
    object = new Ab();
}

【讨论】:

    【解决方案2】:
    A * object = NULL;
    if (/*Test*/) {
        object = new Aa;
    } else {
        object = new Ab;
    }
    

    【讨论】:

      【解决方案3】:

      正如其他人所指出的,C++ 中的运行时多态性通过指针或引用工作。 一般来说,您正在寻找Factory Design Pattern

      【讨论】:

        【解决方案4】:

        'A' 是一个抽象类。它没有自己的 commonFunction() 实现,因此不能直接实例化。只有它的后代可以被实例化(假设它们实现了所有的抽象方法)。

        如果您想根据输入实例化后代类,然后在通用代码中使用该对象,请改为执行以下操作:

        A* object;
        if (/*Test*/) {
            object = new Aa;
        } else {
            object = new Ab;
        }
        ...
        object->commonFunction();
        ...
        delete object;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-06
          • 2020-03-06
          相关资源
          最近更新 更多