【C++学习笔记】 3-6 友元

在这里插入图片描述


1. 背景

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。


2. 友元函数


一个类的有元函数可以访问该类的私有成员

class CCar; //提前声明CCar类,以便后面CDriver类使用
class CDriveer{
	public:
		void ModifyCar(CCar * pCar); //改装汽车
};
class CCar{
	private:
		int price;
	friend int MostExpensiveCar(CCar cars[], int tatal);  //声明友元
	friend void CDriver::ModifyCar(CCar * pCar);          //声明友元
}void CDriver::ModifyCar(CCar * pCar)
{
	pCar->price += 1000;  //汽车改装后价值增加
}
int MostExpensiceCar(CCar cars[], int total)
{
	int tmpMax = -1;
	for(int i = 0; i < total; ++i)
		if(cars[i].price > tmpMax)
			tmpMax = cars[i].price;
	
	return tmpMax;
}
int main()
{
	return 0;
}

将一个类的成员函数(包括构造,析构函数)指向另一个类的友元

class B{
	public:
		void function();
};
class A{
	friend void B::function();
};

3. 友元类


A是B的友元类 -> A的成员函数可以访问B的私有成员

class CCar{
	private:
		int price;
	friend class CDriver; //声明CDriver为友元类
};
class CDriver{
	public:
		CCar myCar;
		void ModifyCar()
		{  //改装汽车
			myCar.price += 1000; //CDriver是CCar的友元类->可以访问其私有成员
	}
}int main(){return 0;}

友元类之间的关系,不能传递,不能继承。


站在巨人的肩上
【1】北京大学信息技术学院《程序设计实习》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值