C++(三十五)之友元类

本篇我们介绍友元类。

上一篇我们知道友元函数可以访问类

内部的private属性成员。

那么友元类呢?

友元类也可以访问类的私有属性,但要注意:

1、友元关系不能被继承。

(A是B的友元类,C继承于A, 但C不一定是B的友元类。

除非B显式声明C也是友元类)

 

2、友元关系不能被传递。

(A是B的友元类,B是C的友元类,但A不一定是C的友元类,

除非C显式声明A是友元类)

 

3、友元关系不能反向。(A是B的友元类,但A没有声明B是A的友元类,

所以友元关系是单向的。除非A显式声明B是A的友元类)

 

下面我们举个例子来说明友元类的访问权限:

/****************************************************
 * brief  : 类作为友元函数 
 * author : shao 
 * date   :	2020-03-06
 * note   : none
 *
 ****************************************************/
#include <iostream>

using namespace std;

class GoodGay;

class Home{
	
	//声明友元类
	friend class GoodGay; 
	
public:
	string livingRoom;  //客厅
	Home(); 
	
private:
	string bedRoom;		//卧室 
};

Home::Home()
{
	this->livingRoom = "客厅";
	this->bedRoom = "卧室"; 
}

class GoodGay{

public:
	GoodGay();
	
	void visit(void);
	
private:
	Home *home;  //在GoodGay中给Home实例化,方便等下访问 

};

GoodGay::GoodGay()
{
	home = new Home();  //给Home做实例化 
}

void GoodGay::visit(void)
{
	cout << "GoodGay 访问:" << home->livingRoom << endl;
 	cout << "GoodGay 访问:" << home->bedRoom << endl;
} 

void test01(void)
{
	GoodGay * gg = new GoodGay();
	
	gg->visit();
}


int main(void)
{
	test01();
	
	return 0;
} 

结果如下:

结果我们可以看到,GoodGay是Home的友元类(此时Home并非是GoodGay的友元类,

所以Home不能访问GoodGay的private成员),

GoodGay的成员函数可以访问Home类的private属性。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值