C++: 友元friend三种用法
友元 friend
让类外一些函数或者类访问私有属性,就需要使用友元。
🎈🎈友元的三种实现:
全局函数做友元
类做友元
成员函数做友元
#include <iostream>
#include <string>
using namespace std;
class Building
{
friend void goodGay(Building* building); //声明友元函数
public:
Building()
{
m_SittingRoom = "客厅";
m_Bedroom = "卧室";
}
string m_SittingRoom;
private:
string m_Bedroom;
};
//全局函数
void goodGay(Building* building) {
cout << "SittingRoom"<<building->m_SittingRoom<< endl;
cout << "BedRoom" << building->m_Bedroom << endl;
}
void test1() {
Building building;
goodGay(&building);
}
int main(){
test1();
system("pause");
return 0;
}
类外友元
#include <iostream>
#include <string>
using namespace std;
class Building;
class MyFriend
{
public:
MyFriend();
void visit();//访问Building中的属性
Building* building;//声明Building类型指针building
};
class Building {
friend class MyFriend;//类外友元
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
//类外写成员函数
Building::Building() {
m_SittingRoom = "SittingRoom";
m_BedRoom = "BedRoom";
}
MyFriend::MyFriend() {
building = new Building;//堆中创建新对象
}
void MyFriend::visit()
{
cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
cout << "MyFriend is visiting " << building->m_BedRoom << endl;
}
void test()
{
MyFriend mick;
mick.visit();
}
int main() {
test();
system("pause");
return 0;
}
成员函数做友元
#include <iostream>
#include <string>
using namespace std;
class Building;
class MyFriend{
public:
GoodGay();
void visit();
void visit1();
Building* building;
};
class Building
{
friend void MyFriend::visit();
friend void MyFriend::visit1();
public:
Building();
public:
string m_SittingRoom;
private:
string m_BedRoom;
};
Building::Building()
{
m_SittingRoom = "SittingRoom";
m_BedRoom = "BedRoom";
}
MyFriend::MyFriend()
{
building = new Building;
}
void MyFriend::visit()
{
cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
cout << "MyFriend is visiting " << building->m_BedRoom << endl;
}
void MyFriend::visit1()
{
cout << "MyFriend is visiting " << building->m_SittingRoom << endl;
cout << "MyFriend is visiting " << building->m_BedRoom << endl;
}
void test1()
{
MyFriend Kite;
Kite.visit();
Kite.visit1();
}
int main() {
test1();
system("pause");
return 0;
}
posted on 2022-04-16 09:47 Michael_chemic 阅读(100) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)