栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++程序设计基础-类和对象:友元机制

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++程序设计基础-类和对象:友元机制

在程序中有些私有属性想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术 。友元的目的就是让一个函数或者类访问另一个类中的私有成员

一、全局函数做友元 (1)示例代码
#include
using namespace std;

class Building
{
	//将全局函数void GoodFriend(Building *building)设为Building的友元,让他可以访问Building内的私有属性
	friend void GoodFriend(Building* building);
public:
	Building()
	{
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}
public:
	string m_SittingRoom;   //客厅
private:
	string m_BedRoom;       //卧室
};

//全局函数
void GoodFriend(Building *building)
{
	cout << "好朋友全局函数 正在访问:" << building->m_SittingRoom << endl;
	cout << "好朋友全局函数 正在访问:" << building->m_BedRoom << endl;
}

void test01()
{
	Building building;
	GoodFriend(&building);
}

int main()
{
	test01();

	system("pause");
	return 0;
}

 

二、类做友元 (1)示例代码
#include
using namespace std;

//类做友元
class Building;
class GoodFriend
{
public:
	GoodFriend();                //构造函数
public:  
	void visit();                //visit函数访问buliding类中的属性
	Building * building;         //创建一个buliding类的指针
};

class Building
{
	friend class GoodFriend;     //将GoodFriend设置为友类(不对其设防)
public:
	Building();                  //构造函数
public:
	string m_SittingRoom;        //客厅,公共
private:
	string m_BedRoom;            //卧室,私有
};

//类外写成员函数,构造函数
Building::Building()
{
	//构造函数复制
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}
GoodFriend::GoodFriend()
{
	//创建一个建筑物对象,用这个building对象去访问Building类中的是属性
	building=new Building;
}


void GoodFriend::visit()
{
	cout << "好友正在访问Buliding中的属性:" <m_SittingRoom<< endl;   //客厅在公共属性中,可以直接访问
	cout << "好友正在访问Building中的属性:" << building->m_BedRoom << endl;     //卧室在私有属性中,将goodfriend设为友类后可以访问
}

void test01()
{
	GoodFriend a;
	a.visit();
}
int main()
{
	test01();
	system("pause");
	return 0;
}

三、成员函数做友元 (1)示例代码
#include
#include
using namespace std;

//好友类
class Building;
class GoodFriend
{
public:
	GoodFriend();
public: 
	void visit01();         //让visit01函数可以访问Building中的私有成员
	void visit02();         //让visit02函数不可以访问Building中的私有成员

	Building * building;
};
//建筑类
class Building
{
friend void GoodFriend::visit01();   //告诉编译器GoodFriend类下的visit01函数作为本类的友类
public:
	Building();
public:
	string m_SittingRoom;
private:
	string m_BedRoom;
};
//类外初始化(构造函数和成员函数)
Building::Building()
{
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}
GoodFriend::GoodFriend()
{
	building = new Building;
}
void GoodFriend::visit01()
{
	cout << "visit01函数正在访问:" << building->m_SittingRoom << endl;
	cout << "visit01函数正在访问:" << building->m_BedRoom << endl;
}
void GoodFriend::visit02()
{
	cout << "visit02函数正在访问:" << building->m_SittingRoom << endl;
	//cout << "visit02函数正在访问:" << building->m_BedRoom << endl
	//visit02函数不是Building的友元,所以不能像visit01一样访问其私有属性
}
int main()
{
	GoodFriend a;
	a.visit01();
	a.visit02();

	system("pause");
	return 0;
}

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934965.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号