在C++中,重载中括号运算符 ('[]') 必须在类内进行。这是因为重载运算符需要访问类的私有成员和数据,而只有在类内才能访问私有成员。因此,中括号运算符的重载函数必须是类的成员函数,而不能在类外定义。

例如,假设你有一个名为 MyClass 的类,并且想要重载中括号运算符以允许使用索引访问类的私有成员。以下代码演示了正确的做法:

class MyClass {
private:
    int data[10];
public:
    int& operator[](int index) {
        if (index >= 0 && index < 10) {
            return data[index];
        }
        else {
            // 处理超出范围的索引
            return data[0]; // 或者抛出异常
        }
    }
};

在这个例子中,operator[] 函数是 MyClass 类的成员函数,它在类内定义。它允许你使用 myClass[index] 语法访问 MyClass 对象的私有成员 data

如果你尝试在类外定义 operator[] 函数,编译器会报错,因为它无法访问类的私有成员。

总结

为了访问私有成员和数据,C++ 中重载中括号运算符 ('[]') 必须在类内定义。

C++中重载中括号运算符 ([]) 的位置: 类内 vs 类外

原文地址: https://www.cveoy.top/t/topic/dq06 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录