数组下标运算符[ ]为什么只能重载为类成员函数,而不能重载为友元函数?

2024-12-19 00:10:37
推荐回答(2个)
回答1:

这个问题你不该在这里问,不是由我们设计C++的,老外有老外的想法。
你这么想知道也可以提供几个选项:
1.此运算符有两个参数,左参数为类恰好符合类成员调用操作符的条件,作为成员函数,它充分确保了只能访问类内的成员;如果是友元,需要设置两个参数,这里会产生一些误会,由于C++继承的存在,友元的两个参数调用会有问题出现不清楚的状况,即基类的成员模糊调用的情况,这不利于程序设计,其他的几个类似的操作符也有这种情况,由于需要引用类内的成员,容易混淆细节。
2.所谓的只能重载为类成员的操作符有四个=、[]、()、->,这几个其实都有共同特点,那就是涉及到了类数据成员的引用,虽然还有一个*也是涉及到了引用,但是用ADT设计程序的话,我们更倾向于不使用指针,所以这四个可以说是比较常用的操作符,如果说从类的基本属性也就是数据的封装来看,这种规定其实是这个程序设计方法的体现,友元函数对类的成员调用毕竟本身就有违数据封装的基本思想。
3.其实,现代编程还有一个很重要的特点,那就是简便性,这是程序设计工程化的一个方案,我们设计的程序就是需要更容易理解且不容易出错,这种规定想来是为了确保这种编程思想的贯彻而设计的。

回答2:

代码里有friend吗?如果是得下补丁,因为vc6.0好象不支持关键字friend.

还有种可能

将你的
#include
#include

using namespace std;

改成
#include
#include