C++ 中对象的私有成员是否可以被别的对象访问?
答案是肯定的,但是分场合(同一个类,友元类)。
什么情况下可以访问C++对象的私有成员呢?
首先,C++私有成员不可以直接访问是个错误理解。C++对象的私有成员在类内是可以访问的,请注意是类内而不仅仅是对象内(同一个类的不同对象是能互相访问对方的私有成员的)。
废话少说,上代码。
class A {
private:
int a;
int b;
public:
A(int a,int b):a(a),b(b){
}
void print(){
std::cout<<a+b<<std::endl;
}
void print(A &tmp){
std::cout<<tmp.a+tmp.b<<std::endl;//此处访问了tmp对象的私有成员。
}
};
int main(){
A test1(2,3);
A test2(4,5);
test1.print();
test1.print(test2);
}
void print(A &tmp)
这个成员函数就访问了不属于本身的(另一个对象的)私有成员,但是两个对象是同一个类的。
那么属于不同类的对象该如何访问类的私有成员呢?
答案:友元类
class A {
friend class B;
private:
int a;
int b;
public:
A(int a,int b):a(a),b(b){
}
void print(){
std::cout<<a+b<<std::endl;
}
void print(A &tmp){
std::cout<<tmp.a+tmp.b<<std::endl;
}
};
class B{
public:
void print(A &tmp){
std::cout<<tmp.a+tmp.b<<std::endl;//B中访问类A对象的私有成员
}
};
int main(){
A test1(2,3);
A test2(4,5);
test1.print();
test1.print(test2);
B test3;
test3.print(test1);
}
在类A中添加了friend class B
这一声明。可以理解为A主动说:B是我的朋友。因此B就可以访问A的私有成员。但是这种关系是单向的,A把B当朋友让B访问A的私有成员,B可没说A是B的朋友,因此A仍然不可访问B的私有成员。