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

标签 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 类型,对吗?

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

现在,当我在寻找答案时,我遇到了静态转换,所以我在以下方面进行了尝试:

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

但这似乎也不起作用,我们将不胜感激。

最佳答案

处理这个问题的一种方法是在基类中定义一个接口(interface)(虚方法)并在子类中定义实现:

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,但这些都是更高级的主题。

关于c++ - 如何创建继承类对象的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912565/

相关文章:

c++ - 检测草图像中的植物

C++ main.cpp 编译错误

javascript - 唯一的对象数组并使用 lodash 或下划线合并重复项

java - 如何实现POJO类的继承

默认情况下是 Java 类,它将隐式扩展 java.lang.Object

C++ Vector at/[] 运算符速度

mysql - 获取数据库中相似行的数量并在表单中单独显示它们

c++ - 使用结构和指针数组 C++

Swift 协议(protocol)继承无法编译

c++ - 具有泛型类方法定义的长模板参数列表