C++2类和对象 友元 全局函数做友元 类做友元 类内成员函数做友元

友元函数

简介:在程序里面有些私有属性也想让类外的函数或类去访问,就需要用到友元函数。友元的目的就是让一个函数或类的成员去访问另一个类的私有成员。如同两个陌生人强制建立友谊,瞬间感情升温变成好朋友。
关键字:friend 用三个程序解释三种方法
1.全局函数做友元

#include"iostream"
using namespace std;
class Person
{
	friend void friend_people(Person *p);
	public:
		string y_name="yang";							//你的名字 
	private:	
		string y_telephone_password="123456";			//你的手机密码 
};
void people(Person *p)
{
	cout<<"陌生人可以知道你的名字"<<p->y_name<<endl;	
//  因为没有friend关键字的定义 所以这个全局函数不能调用私有成员 
//	cout<<"陌生人可以知道你的手机密码"<<p->y_telephone_password<<endl;				 
}
void friend_people(Person *p)
{
	cout<<"好朋友知道你的手机密码"<<p->y_name<<endl;
	cout<<"好朋友知道你的手机密码"<<p->y_telephone_password<<endl;
}
int main()
{
	Person p1;
	people(&p1);
	friend_people(&p1);
	return 0;
}

2.类做友元

#include"iostream"
using namespace std;

class house
{
	//这样定义以后  在Goodfriend这个类的函数中就可以调用house这个类中的私有成员 
	friend class Goodfriend;
	public:
		house();
		string house_saloon;			//客厅
	private:
		string house_bedroom;			//卧室
};
house::house()
{
	house_saloon="客厅";
	house_bedroom="卧室"; 
}
class Goodfriend
{
	public:
		void visit();
		house *ho;
		Goodfriend();	
};
Goodfriend::Goodfriend()
{
	ho=new house;	
}	
void Goodfriend::visit()
{
	cout<<"你的好朋友去你的"<<ho->house_saloon<<endl;
	cout<<"你的好朋友去你的"<<ho->house_bedroom<<endl;
}
void test()
{
	Goodfriend GF;
	GF.visit();
}
int main()
{
	test();
	return 0;
}

3.类内成员函数做友元

#include"iostream"
#include"string.h"
using namespace std;

class house;
class goodfriend
{
		public:
			void visit1();		//做友元函数参观卧室
			void visit2();		//做普通函数参观客厅
		 	house *ho;			//准备接收在堆区开辟一块house类的空间
			goodfriend();
};
class house
{
	friend void  goodfriend::visit1();
	public:
		house(); 
		string house_saloonroom;			//客厅 
	private:
		string house_bedroom;				//卧室 
};
house::house()
{
	house_saloonroom="客厅";
	house_bedroom="卧室"; 
}
goodfriend::goodfriend()
{
	ho=new house;				//在堆区开辟一块house类的空间			
}
void  goodfriend::visit1()
{
	cout<<"好朋友参观你的"<<ho->house_bedroom<<endl;	
} 
void  goodfriend::visit2()
{
	cout<<"好朋友参观你的"<<ho->house_saloonroom<<endl;		
}
int main()
{
	goodfriend GF;
	GF.visit1();
	GF.visit2();
	return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值