如何创建继承的类对象数组?

时间:2017-01-28 17:16:56

标签: c++ arrays inheritance

我在处理当前项目时遇到了一些麻烦。该项目包括从文件中获取数据行并创建所有继承基类的类对象数组。

所以,这是我到目前为止所理解的:

class BaseClass {
    // create empty and non-empty constructor
}

class SubClass : public BaseClass {
    // create constructor specifically for this class 
}

int main() {
    BaseClass *array[size];
    array[index] = new SubClass();

    return 0;
}

由于SubClass继承了BaseClass,当我向数组中添加一个新对象时,它应该是SubClass类型,对吗?

当我调试程序并查看该对象时,它不允许我指向任何SubClass方法/变量进行操作,这是我需要能够做到的。

现在当我在寻找答案时,我遇到了静态铸造,所以我尝试了以下程度:

(static_cast<SubClass*>(array[index])->subclass_variable) = some_value

但这似乎也不起作用,对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

处理此问题的一种方法是在基类中定义接口(虚拟方法),在SubClass中定义实现

class BaseClass {
    // create empty and non-empty constructor
    virtual void f() = 0;
}

class SubClass : public BaseClass {
    // create constructor specifically for this class 
    virtual void f() { std::cout << "I am your SubClass" << std::endl; }
}

然后你可以拨打array[index]->f();

另一种方式是访问/类型切换类,另一种是NVI,但这些是更高级的主题。