友元函数
发布日期:2021-11-20 10:17:47 浏览次数:11 分类:技术文章

本文共 2259 字,大约阅读时间需要 7 分钟。

/*

生活中,你的家有客厅(public),有你的卧室(private)
客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。
但是呢,你也可以允许你的好闺蜜好基友进去。

在程序里,有些私有属性也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。

友元的目的就是让一个函数或者类访问另一个类中的私有成员

友元的关键字为:friend

友元的三种实现:

1.全局函数做友元

2.类做友元
3.成员函数做友元

*/

1.全局函数做友元

#include "pch.h"#include 
#include
using namespace std;class building {
//goodgay全局函数是building好朋友,可以访问building中私有成员。 friend void goodgay(building *building); //构造函数赋初值public: building() {
m_sittingroon = "客厅"; m_bedroon = "卧室"; }public: string m_sittingroon;//客厅private: string m_bedroon;//卧室};//全局函数void goodgay(building *building) {
cout << "全局函数正在调用客厅" << building->m_sittingroon << endl; cout << "全局函数正在调用卧室" << building->m_bedroon << endl;}void test01() {
building building; goodgay(&building);}int main(){
test01();}

2.类做友元

#include "pch.h"#include 
#include
using namespace std;//类做友元class goodgay {
public: goodgay();public: void vist();//参观函数,访问building 中的属性 building* building;//这个重要};class building {
friend class goodgay;//类做友元public: building();//构造函数类外实现public: string m_sittingroom;private: string m_bedroom;};//类外写成员构造函数building::building() {
//前面的意思是作用于building 下, m_sittingroom = "客厅"; m_bedroom = "卧室";}//goodgay::goodgay() {
//创建建筑物对象 //building = new building;//报错了}void goodgay::vist() {
}int main(){
std::cout << "Hello World!\n"; }

3.成员函数做友元

#include "pch.h"#include 
#include
using namespace std;class Building;class Goodgay {
public: Goodgay(); void vist();//可以访问building的私有成员 void vist2();//不可以访问building的私有成员 Building * building;};class Building {
//告诉编译器,Goodgay类下的vist成员函数作为本类的好朋友,可以访问私有成员 friend void Goodgay::vist();public: Building();//构造函数public: string m_sitting;private: string m_bedroom;};//类外实现构造函数Building::Building() {
m_sitting = "客厅"; m_bedroom = "卧室";}Goodgay::Goodgay() {
building = new Building;//即创建Building对象的堆区,并用指针维护着,}//类外实现成员函数void Goodgay::vist(){
cout << "正在访问" << building->m_sitting << endl; cout << "正在访问" << building->m_bedroom << endl;}void Goodgay::vist2() {
cout << "正在访问" << building->m_sitting << endl; cout << "正在访问" << building->m_bedroom << endl;//不可访问,报错}//全局函数void test01() {
Goodgay good; good.vist();}int main(){
test01();}

转载地址:https://blog.csdn.net/weixin_43223362/article/details/102859938 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:继承-1基本语法
下一篇:const修饰成员函数

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2023年08月26日 21时06分58秒