【问题标题】:Is it possible to overload [] operator to do different thing in C++是否可以重载 [] 运算符以在 C++ 中执行不同的操作
【发布时间】:2021-07-19 13:54:10
【问题描述】:

我想重载“[]”女巫用于访问数组

但我也想分开读/写来做不同的事情

例如:

class myclass{
private:
    int val;
public:
    myclass(){val=0;}
    myclass(int _in){val=_in;}
    ....
    //for A=myclass[n]
    myclass& operator[](int index){
        ...
        return 
    }
    //for myclass[n]=B
    myclass& operator[](int index){
        ...
        return 
    }
}

【问题讨论】:

  • 您可能拥有不同于读/写版本的 const/non-const 版本。
  • 这看起来可以通过返回代理来完成
  • 问题是你不是在读/写operator[],而是读/写结果。因此,您必须编写一个由operator[] 返回的类,并在读取和写入时采取相应的行动。
  • 假设您希望两个重载具有相同的参数类型(在您的情况下为int)可以为const 重载operator[]()(不能更改(非可变)成员myclass 也不返回对myclass 成员的非const 引用)和非const(能够更改myclass 的成员)。也可以为不同的参数类型重载 operator[]()(例如,intstd::string,如果这样的用法对您的类有意义)。

标签: c++ operator-overloading overloading subscript array-indexing


【解决方案1】:

选择的运算符重载仅受操作数类型的影响,而不是您如何使用返回值。一对操作数只能有一个重载。

但是,您可以使用在用作赋值的左手操作数时以一种方式表现的返回值,而在用作右手操作数时以另一种方式表现的返回值。

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2010-10-20
    • 2010-10-21
    • 2014-02-22
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多