友元(friend)

友元功能:通过friend友元设置,外部函数或者外部类可以访问该类的私有、protected成员

1. 友元分友元函数、友元类。友元函数实际上是一个定义在类外部的普通函数,不属于任何类,友元函数声明可以放在类的private、protected、private任何地方没有区别,友元类的所有函数都是友元函数

2. 友元关系不能被继承(好比朋友的儿子不一定还是朋友一样)

3. 友元关系是单向的(a类可以通过友元访问b类私有,不代表反向也可以)

4. 友元访问类内私有或protected成员 比 公有的set()/get()更好,更加具有封装性:因为友元只设置指定的友元函数或友元类访问其私有,而后者public set()是公有的,故友元并没有破坏封装性,反而更具有更好的封装性

# include <iostream>
using namespace std;
class Teacher
{
	friend void set(Teacher &); //友元函数声明 
	friend class tax;	//友元类声明,声明的这两个都有特权可以外部访问该类私有或保护成员 
	
protected:
	int salary;
};

void set(Teacher &t) //外部友元函数
{
	t.salary = 100;
}

class tax //外部友元类 
{
public:
	int chackSalary(Teacher &t)
	{
		return t.salary;
	}
};

int main()
{
	Teacher t1;
	set(t1);	//修改类内保护成员变量 
	tax t2;
	int a = t2.chackSalary(t1);//查询类内保护成员变量 
	cout<<a<<endl;
	
	return 0;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值