全局函数做友元 其实就是声明一个函数可访问私有属性
[] [c++] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #include<bits/stdc++.h> using namespace std; class Building { //全局函数做友元声明 goodgay可以访问building中私有成员 friend void goodGay(Building &building); public: string m_settingRoom; private: string m_BedRoom; }; //全局函数 void goodGay(Building &building) { cout<<"正在访问全局变量1"<<building.m_settingRoom<<endl; cout<<"正在访问全局变量2"<<building.m_BedRoom<<endl; //m_bedroom本来访问不了 } void test01() //m_settingRoom是public 随便访问 { Building building; goodGay(building); } int main() { test01(); return 0; }
类做友元 一个类能访问其它类的私有成员 以下代码有些复杂 因为用的是类外声明函数(加定义域)
大致就是 1.先声明一个Building类 2.写一个GoodGay类 里面声明了其构造函数 内部维护一个指针 3.Building类中有一个构造函数 两个属性 公有的客厅以及私有的卧室 4.类外写building的构造函数 初始化了客厅卧室 5.类外写GoodGay的构造函数 6.声明友元 可访问私有的卧室
[] [c++] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 #include<bits/stdc++.h> using namespace std; class Building; class GoodGay { public: GoodGay(); void visit(); //参观函数访问Building中的属性 private: Building *building; }; class Building { //声明GoodGay是本类的好朋友 可以访问 friend class GoodGay; public: Building();//先声明 public: string m_SittingRoom; //客厅 private: string m_BedRoom;//卧室 }; //类外写成员函数 加个作用域就行了 Building::Building() { m_SittingRoom="客厅"; m_BedRoom="卧室"; } GoodGay::GoodGay() { //相当于在堆区创建建筑物对象 new返回了一个指针 building=new Building; } void GoodGay::visit() { cout<<"好基友类正在访问1"<<building->m_SittingRoom<<endl; cout<<"好基友类正在访问2"<<building->m_BedRoom<<endl; } void test01() { GoodGay gg; gg.visit(); } int main() { test01(); return 0; }
成员函数做友元 其实就是把上文代码中visit函数前面加个friend 放Building类下
[] [c++] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Building { //声明visit函数是本类的好朋友 可以访问 friend void GoodGay::visit(); public: Building(); public: string m_SittingRoom; private: string m_BedRoom;//卧室 };
总结 等于说就是这一个操作