我有以下类:Container、Element 以及一些继承 的类,例如。 按钮、输入等...
我在向 Container 数组添加元素时遇到问题,我的 main() 看起来像这样:
Container c;
c.Add( Button(...) );
c.Add( Input(...) );
其中“...”是一些构造函数参数。
在容器类中,我有一个指针数组来存储属于该容器的所有元素:
Element ** elements;
但我遇到的问题是如何实现 Add 方法,我希望这样的方法可行:
void Add(const CControl & newElement){
elements[elemCnt++] = &newElement;
}
(元素数组分配:elements = new Element * [100];)
但是我得到了这个编译错误:
main.cpp: In member function ‘Container& Container::Add(const Element&)’:
main.cpp:138:23: error: invalid conversion from ‘const Element*’ to ‘Element*’
当我删除 const 限定符时,出现编译错误,指出没有合适的候选者。
问题是,我对 C++ 中的多态性和继承不熟悉,所以我可能会在这方面走错路。最好的方法是什么?
PS:主要方法必须看起来一样,也不要建议任何 vector 或 STL 东西。
最佳答案
Add
应该拿一个指针:
void Add(CControl * newElement){
elements[elemCnt++] = newElement;
}
那么你可以这样调用它
c.Add( new Button(...) );
c.Add( new Input(...) );
如果您确实无法更改调用代码,则需要以某种方式创建临时拷贝。
例如。通过实现虚拟 Clone
CControl
中的方法, Input
, Button
在 Add
中调用它.
void Add(const CControl & newElement){
elements[elemCnt++] = newElement.Clone();
}
关于c++ - 多态性和指针数组 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10054800/