C++ 数组重载运算符 []

Posted

技术标签:

【中文标题】C++ 数组重载运算符 []【英文标题】:C++ array overloading operator [] 【发布时间】:2014-11-19 16:16:34 【问题描述】:
class myClass 
    public:
        int y[2];
        myClass() 
            y[0] = 0;
            y[1] = 0;
        
        void operator[](int x) 
            //
        
;

int main() 
    myClass myobj();
    //myobj.y[0] = 1;

    return 0;

上面的类 myClass 有一个公共成员,一个由两个元素组成的整数数组。现在,我需要重载 operator[] 而不是在 main myobj.y[0] = 1; 中编写,以便通过编写 y[0] = 1; 来执行相同的操作,将数组的元素设置为等于某个值,例如此处为 1。我已经为此苦苦挣扎了一个多小时,起初我不知道要声明什么 operator[],也许是无效的?其次,无论如何,我可以将数组的位置传递给参数 x 但我不知道如何传递值,我是否也应该重载 operator = ?

【问题讨论】:

你在正确的轨道上。这是一个教程:tutorialspoint.com/cplusplus/… @RSahu +1,比我的回答好;你已经教会了 OP 如何钓鱼。 @Bathsheba,SO 只是网络上寻找此类问题答案的众多资源之一。希望人们尽可能多地利用它们。 非常好的例子,但与我的问题相符,能够传递位置但不能传递价值 ^^ 【参考方案1】:

您需要返回一个 reference 到矢量元素,以便您可以通过该引用对其进行修改:

int& operator[](std::size_t index) 
    /*ToDo - some bounds checking here?*/
    return y[index];

会做的。 std::size_t 在这里很合适,因为它将适合您的平台。

【讨论】:

你将在 main 中访问对象为 myobj[0]=1,而不是 y[0]=1

以上是关于C++ 数组重载运算符 []的主要内容,如果未能解决你的问题,请参考以下文章

使用数组重载运算符“=”会导致运行时错误 C++

C++ 运算符重载

C++ 运算符重载四(自定义数组类)

C++ 作业 - 使用动态数组重载 >> 运算符

C++中赋值运算操作符和=重载有啥区别?

C++ - 重载 [] 运算符