客厅:客人可以随意走动;卧室:只有自己能进去;
现在想要自己的好朋友可以进去,就需要用到友元技术。即友元的目的就是让一个函数或者类访问另一个类中私有成员。
关键字:friend
三种实现方法:
全局函数做友元:
#include<iostream>
using namespace std;
class Building{
friend void goodGay(Building* building);
public:
Building() {
room = "客厅";
myRoom = "卧室";
}
public:
string room;
private:
string myRoom;
};
//全局函数
void goodGay(Building *building) {
cout << "好朋友正在访问" <<building->room<< endl;
//如果不将dooGay变成Building的友元函数,这里就会报错
cout << "好朋友正在访问" << building->myRoom << endl;
}
void test() {
Building building;
goodGay(&building);
}
int main() {
test();
system("pause");
return 0;
}
类做友元:
说明:在类外定义成员函数时,需要先在类中声明函数。利用类名::函数名(),可以定义类的成员函数。
#include<iostream>
using namespace std;
class Building{
friend class GoodGay;
public:
string room;
Building();
private:
string myRoom;
};
//类外写成员函数
Building::Building() {
room = "客厅";
myRoom = "卧室";
}
class GoodGay {
public:
Building* building;
GoodGay();
void visit();
};
GoodGay::GoodGay() {
building = new Building();
}
void GoodGay::visit() {
cout << "好基友类正在访问:" << building->room << endl;
cout << "好基友类正在访问:" << building->myRoom << endl;
}
void test() {
GoodGay gg;
gg.visit();
}
int main() {
test();
system("pause");
return 0;
}
成员函数做友元:
#include<iostream>
using namespace std;
class Building;
class GoodGay;
//要先定义GoodGay类。。。
//我尝试在Building之后定义,就不行,之前也先声明了这两个类
class GoodGay {
public:
GoodGay();
void visit();//让该函数可以访问Building的私有成员
void visit2();
private:
Building* building;
};
class Building{
friend void GoodGay::visit();
public:
string room;
Building();
private:
string myRoom;
};
//类外写成员函数
Building::Building() {
room = "客厅";
myRoom = "卧室";
}
GoodGay::GoodGay() {
building = new Building();
}
void GoodGay::visit() {
cout << "好基友类正在访问:" << building->room << endl;
cout << "好基友类正在访问:" << building->myRoom << endl;
}
void GoodGay::visit2() {
cout << "好基友类正在访问:" << building->room << endl;
//cout << "好基友类正在访问:" << building->myRoom << endl;
}
void test() {
GoodGay gg;
gg.visit();
}
void test2() {
GoodGay gg;
gg.visit2();
}
int main() {
test();
system("pause");
return 0;
}