关于C++ 对象私有成员不可访问的理解误区

C++中,同一类的不同对象可以互相访问对方的私有成员。通过成员函数,一个对象可以访问另一个同类型对象的私有成员,如示例中的`print(A&tmp)`函数。此外,通过友元类,一个类可以允许另一个类访问其私有成员,但这种关系是单向的。友元类可以访问私有成员,而被友元的类不能反过来访问友元类的私有成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的私有成员。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值