繁体   English   中英

如何为包含 C++ 中抽象类数组的类重载运算符 []?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM