C++中关于用成员函数实现运算符重载的问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 18:42:55
比如说我现在有一个类。申明了两个对象A和B。A的成员函数能够访问B的私有数据吗?如果不能的话,那么当我重载运算符“+”后(在类中以成员函数形式实现),为什么可以A+B?这个不是被读为A.operator+(B)吗?此时怎么又可以访问B的私有数据了?希望能详细回答

对于同一个类的两个成员是不能互相访问私有数据的.
但也涉及到一个说法问题

假设这个类为
class Classtest{
private:
int value;

public:
//两个构造函数 :
Classtest(){value=0;}
Classtest(int j){value=j;}
//设置,和取值函数 :
void setvalue(int val){value=val;}
int getvalue(){return value;}
//重载加法操作符 :
Classtest operator +(Classtest&b){
return Classtest(this->value+b.value);
}
};

A+B
可以获得结果是因为执行了A.operator+(B);
该函数是A的成员函数所以可以直接访问A的私有数据
由于在类内 所以B也可以访问自己的私有数据.
但不是A在访问B的私有数据.
注意这句话
int operator +(Classtest&b){return this->value+b.value;}
对于B是通过b.value获得值,对于this是通过直接访问变量value来获得的.
如果在类外调用B.value;就会出错
因为类外B无法访问自己的私有数据,只能调用B的公有成员函数(该函数是类内的代码,所以他可以访问类的私有数据)
------------------------------
#include <stdio.h>
#include <stdlib.h>
class Classtest{
private:
int value;

public:
//两个构造函数 :
Classtest(){value=0;}
Cl