偷偷拿来记录一下萌新的cs路——day 28
友元
#include<iostream>
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<iostream>
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<iostream>
#include<string>
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(); 而报错。
运行结果:
以后学了更多知识还会回来更新的!有误之处恳请大佬指正,提前感谢!