如何在c ++中为包含抽象类数组的类重载operator []?

时间:2017-10-14 10:09:17

标签: c++ oop

这是我的问题:我有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;
}

但这并没有编译。我想我的问题是在操作员[]的超载中,但我似乎无法找到好的答案。

编译错误:二进制&#39;运算符&#39; :没有找到哪个操作符采用类型&#39; A *&#39;的右手操作数。 (或者没有可接受的转换) 二元&#39;运算符&#39; :找不到哪个操作符采用类型&#39; B *&#39;的右手操作数。 (或者没有可接受的转换)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在ContainerBase类中,arr被定义为指针数组。这是对的。在这个类中,operator []应该返回指针:

Base*& operator[](int index) { return arr[index]; };
Base* operator[](int index) const { return arr[index]; };

这将解决问题。