最近实验发现C++中可以在赋值运算符中可以访问私有成员,举例如下:
#include <iostream>
using namespace std;
class B {
private:
int j;
public:
B(int jj = 9): j(jj){}
};
class A {
private:
int i;
A(const A &);
public:
A(int ii=0): i(ii){}
A& operator=(const A& a) {
i = a.i; // 此处正常,A中的私有成员i是可以访问的
return (*this);
}
A& operator=(const B& b) {
i = b.j; // 此处报错,B中的私有成员j是无法访问的
return (*this);
}
};
int main(int argc, char **argv)
{
A a;
A b;
b = a;
system("pause");
return 0;
}
两处都是赋值运算符中传入的对象,但传入相同类型的对象时,是可以正常访问,传入不相同类型的对象时,访问出错。
我想C++这样设计的原因可能是为了方便(等以后看书看到其他原因再来更正)。