我在处理当前项目时遇到了一些麻烦。该项目包括从文件中获取数据行并创建一个类对象数组,这些类对象都继承了一个基类。
所以,这是我到目前为止的理解:
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/