我在当前项目中工作时遇到了一些麻烦。该项目包括从文件中获取数据行,并创建一个均继承了基类的类对象数组。
因此,这是我到目前为止所了解的:
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
但这似乎也不起作用,对此的任何帮助将不胜感激。
解决此问题的一种方法是在基类中定义接口(虚拟方法),并在中实现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,但这是更高级的主题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句