012--C++类的友元函数及友元类(最优)

本文介绍了C++中的友元机制,包括友元函数和友元类,它们允许外部代码访问类的私有和保护成员,从而在特定情况下打破封装性。友元是单向的,不传递且不继承。通过示例代码展示了如何声明和使用友元函数及友元类,以及它们如何访问和修改类的内部状态。
摘要由CSDN通过智能技术生成

简介:友元函数分为友元类以及友元函数,它的重点在于能够调用一个被private(私有化)的类中的所以数据以及函数。你要知道一个类它是具有封装性的,因为它的数据被private,public.所以,friend 打破了这种封装性,也就可以调用其所在类所有数据。

友元

在局部打破程序封装性的一种手段

关键字:friend

友元函数:友元类

友元函数:

  1. 这个函数不属于类
  2. 这个函数可以在类外定义,也可以在类内定义,不管定义 在哪,都是一个普通的函数
  3. 有权访问和调用类的私有以及保护成员

友元类:

  1. 与目标无关的一个类
  2. 要在类外定义
  3. 友元类可以有权访问目标类的所有成员

友元的特点:

  1. 单方向
  2. 不传递
  3. 不继承

代码学习:(有注释

#include<iostream>
using namespace std;
class MyStu{
	int hp;
	int mp;
public:
	friend class fStu;//声明友元类,说明fStu是MyStu的朋友,所以fStu 可以调用MyStu的
	MyStu(){//所有数据
		hp = 10;
		mp = 20;
	}//注意友元函数的写法,必须在参数体内写上这个类的应用,这样才能调用这个类的所有数据
	friend int getHp(MyStu& s);//友元函数类中声明,类外定义
	friend int getMp(MyStu& s){//友元函数类中声明并定义
		return s.mp;//友元函数的声明要再类内,但是它只是一个普通的函数,不属于类
	}

};
int getHp(MyStu& s){//友元函数类外定义不用再写标志符friend;
	return s.hp;
}
class MyStu;
class fStu{
public:
	fStu(){
	
	}
	void setFsu(MyStu& s){//友元类中的相关函数如果要使用类中的数据,就要再函数的参数
		s.mp = 100;//列表里加上类的引用。
		s.hp = 200;
	}
	void getHM(MyStu& s){
		cout << "友元类中的函数得到的hp,mp值:" << endl;
		cout << s.mp << "    " << s.hp << endl;
	}
};
int main(){
	MyStu s;
	cout << "类中的友元函数得到的hp,mp值:" << endl;
	cout << getHp(s) << endl;
	cout << getMp(s) << endl;
	cout << "---------------------" << endl;
	fStu f;
	f.setFsu(s);
	f.getHM(s);
	return 0;

}

运行结果:


附加图:不供参考(友元类和类的儿子是不继承的关系,但是友元类的儿子依然和类是友元关系


不要停留在昨天的日子里,要学会拥抱明天,明天的风景真的很美··················

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码字界陈冠希

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

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

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

打赏作者

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

抵扣说明:

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

余额充值