允许通过[]进行读访问,同时仅授予对子类

时间:2017-05-24 14:30:42

标签: c++ operator-overloading

#include<vector>
#include<iostream>
class A {
  private:
    std::vector<int> v_;
  protected:
    int& operator[](int idx) { return (v_.at(idx)); }; //[1]
  public:
    A(): v_(5) {}
    const int& operator[](int idx) const {return (v_.at(idx)); }; //[2]
};

int main() {
  A myA;
  const A myB;
  //std::cout << myA[1] << std::endl; //does not work [3]
  std::cout << myB[1] << std::endl; //does work [4]
}

假设我想让operator[]以下列方式工作:

  1. 它应该提供一个只读界面来获取成员向量i [2] 元素。
  2. 但是,派生类也应该允许使用operator[]将一些数据写入向量。 [1]
  3. 使用这些签名,我无法定义非const对象并访问它[3]。但是,如果我删除受保护的接口[2],则行[3]将起作用。为什么会这样?

    那么我有什么选择来达到预期的行为?我是否必须将v_移至protected并直接从我的子类中进行评估?

0 个答案:

没有答案