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

C++ 友元

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

C++ 友元

偷偷拿来记录一下萌新的cs路——day 28 

友元

#include
using namespace std;

class Building {
	friend void goodFriend(Building* building);  // goodFriend全局函数是Building类的好朋友,可访问类中私有内容
public:
	Building() {
		m_SittingRoom = "客厅";
		m_BedRoom = "卧室";
	}
	string m_SittingRoom;
private:
	string m_BedRoom;
};

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

void test01() {
	Building b;
	goodFriend(&b);
}

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

运行结果:

类作友元

#include
using namespace std;

class Building;  // 类的声明

class GoodFriend {
public:
	GoodFriend();
	void visit();  // 参观函数 访问Building中属性

	Building* b;
};

class Building {
	friend class GoodFriend;
public:
	Building();
	string m_SittingRoom;
private:
	string m_BedRoom;
};

// 类外写成员函数
Building::Building() {
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}

GoodFriend::GoodFriend() {
	// 创造建筑物对象
	b = new Building;
}

void GoodFriend::visit() {
	cout << "好朋友类正在访问:" << b->m_SittingRoom << endl;
	cout << "好朋友类正在访问:" << b->m_BedRoom << endl;
}

void test01() {
	GoodFriend g;
	g.visit();
}

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

运行结果:

成员函数作友元

#include
#include
using namespace std;


class Building;

class GoodFriend {
public:
	GoodFriend();
	void visit();  // 使visit函数可访问Building中私有成员
	void visit2();  // visit2不可访问
	Building* b;
};

class Building {
	// GoodFriend类中的visit作为Building的friend可以访问私有成员
	friend void GoodFriend::visit();
	friend void GoodFriend::visit2();
public:
	Building();  // 构造函数声明
	string m_SittingRoom;
private:
	string m_BedRoom;
};

// 类外实现成员函数
Building::Building() {
	m_SittingRoom = "客厅";
	m_BedRoom = "卧室";
}

GoodFriend::GoodFriend() {
	b = new Building;
}

void GoodFriend::visit() {
	cout << "visit函数正在访问:" << b->m_SittingRoom << endl;
	cout << "visit函数正在访问:" << b->m_BedRoom << endl;
}

void GoodFriend::visit2() {
	cout << "visit2函数正在访问:" << b->m_SittingRoom << endl;
	//cout << "visit2函数正在访问:" << b->m_BedRoom << endl;
}

void test01() {
	GoodFriend g;
	g.visit();
	g.visit2();
}

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

其中 GoodFriend类不能在 Building类后定义,否则会因无法识别 friend void GoodFriend::visit/visit2(); 而报错。

运行结果:

以后学了更多知识还会回来更新的!有误之处恳请大佬指正,提前感谢!

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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