[英]How can I overload operator [] for a class containing an array of an abstract class in c++?
这是我的问题:我有 2 个类,它们是抽象基类的专业化。 我需要创建一个新类,它是这两个类的容器。
class Base {
public:
virtual void print() =0;
};
class A : public Base {
public:
void print() { cout << "I am A"; };
};
class B : public Base {
public:
void print() { cout << "I am B"; };
};
class ContainerBase {
public:
ContainerBase() { arr = new Base*[10]; };
~ContainerBase() { delete[] arr; };
Base & operator[](int index){ return *arr[index]; };
Base & operator[](int index) const { return *arr[index]; };
private:
Base **arr;
};
int main(){
A a;
B b;
ContainerBase c;
c[0] = &a;
c[1] = &b;
return 0;
}
但这不能编译。 我想我的问题出在运算符 [] 的过载上,但我似乎找不到好的答案。
编译错误:二进制“运算符”:找不到采用“A*”类型右侧操作数的运算符(或没有可接受的转换)二进制“运算符”:找不到采用“类型”右侧操作数的运算符B*'(或没有可接受的转换)
感谢您的帮助 !
在 ContainerBase 类中, arr 被定义为一个指针数组。 这是对的。 在这个类中,operator[] 应该返回指针:
Base*& operator[](int index) { return arr[index]; };
Base* operator[](int index) const { return arr[index]; };
这将解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.