c++类的友元函数

本文探讨了C++中的友元函数及其重要性。友元函数允许非成员函数访问类的私有和保护成员,提供了灵活性。主要内容包括友元类的声明,使一个类可以访问另一个类的私有成员,以及友元函数的声明,让全局函数能够访问类的私有数据。

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

友元函数的意义有三点:
1.友元类的声明:1.1两个独立的类A、B,在A中声明了友元类B,那么B类对象就可以访问A类的私有成员、私有函数
1.2在B类中有内部类C,想要访问C或者对C进行的一系列操作都需要在类B中(C类外部)将C声明为友元函数
2.友元函数的声明:将全局函数在类中声明成由友元函数,那么全局函数就可以访问A类的私有成员、私有函数

#include <iostream>
using namespace std;
class A
{
public:
	//1.友元类的声明     // 声明的位置 和 public private没有关系
	friend class B;//B类是A的好朋友 ,在B中可以访问A类的私有成员、私有函数
	//2.友元函数的声明  
	friend void modifyA(A *pA, int _a); //函数modifyA是类A的好朋友,可以访问A类的私有成员
	friend void modifyA1(A &a, int _a);
	A(int a = 0, int b = 0)
	{
		this->a = a;
		this->b = b;
	}
	int getA()
	{
		return this->a;
	}
private:
	int a;
	int b;
};
//类B,在类A中进行了声明就可以作为A的友元函数
class B
{
public:
	void Set(int a)
	{
		Aobject.a = a;//给类A中的私有变量a赋值
	}
	void printB()
	{
		cout << Aobject.a << endl;
	}
	friend class C;
	class C//内部类需要友元函数在外部类声明才能使用,使用时需要使用域名符::
	{
	public:
		int c = 0;
	};
private:
	A Aobject;//组合类A,产生一个类A的对象
};
void modifyA(A *pA, int _a)//因为有了友元函数在类A中的声明,才能访问A的私有成员
{
	pA->a = _a;
}
void modifyA1(A &pa, int _a)
{
	pa.a = _a;
}
void main03()
{
	B b1;
	b1.Set(300);
	b1.printB();
	system("pause");
}
void main04()
{

	A a1(1, 2);
	cout << a1.getA() << endl;
	modifyA(&a1, 300);//指针的方式传递对象
	modifyA1(a1, 400);//引用的方式传递对象
	cout << a1.getA() << endl;

	B::C obj;
	cout << obj.c << endl;

	cout << "hello..." << endl;
	system("pause");
	return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值