全局函数做友元
#include<iostream>
#include<string>
using namespace std;
class Home {
friend void DoMake(Home & p); //声明一个友元函数,可以传值也可以传址,但上下要一致
public:
string HomeWorkRoom;
private:
string MyRoom;
public:
Home() {
HomeWorkRoom = "工作室";
MyRoom = "卧室";
};
void DoWork() {
cout << "你的基友正在访问:" << HomeWorkRoom << endl;
};
};
//声明一个全局函数,传入一个Home类型的地址
void DoMake(Home & p) {
cout << "你的女友正在访问:" << p.MyRoom << endl;
cout << "你的女友正在访问:" << p.HomeWorkRoom << endl;
}
int main() {
Home h;
h.DoWork(); //正常输出
//h.GoRoom(); //是不可访问的 ,因为GoRoom是私有函数
DoMake(h);// 因为你在类里面声明了友元函数DoMake,所以这个函数可以访问Home里的私有成员
}
友元类
#include<iostream>
#include<string>
using namespace std;
class building;
class goodguy {
public:
goodguy(); //类内声明一个构造函数,但是不实现它
void show(); //类内声明一个show函数,类外实现,用来访问所有成员
private:
building* build; //goodguy类内创建一个building类的指针
};
class building {
friend class goodguy;
public:
building(); //构造函数空实现,类外再实现
string HomeRoom; //客厅
private:
string MyRoom; //私人房间
};
//类外来实现类内声明的构造函数,需要先写明作用域
goodguy::goodguy() {
build = new building;
}
building::building() {
HomeRoom = "客厅";
MyRoom = "私人房间";
}
void goodguy::show() {
cout << "你的好基友正在访问:" << build->HomeRoom << endl;
cout << "你的好基友正在访问:" << build->MyRoom << endl; //这里需要声明过友元才可以访问
}
void test1() {
goodguy gg;
gg.show();
}
int main() {
test1();
}
成员函数做友元函数
#include<iostream>
#include<string>
using namespace std;
class building;
class goodguy {
public:
goodguy(); //类内声明一个构造函数,但是不实现它
void show(); //类内声明一个show函数,类外实现,用来访问所有成员
private:
building* build; //goodguy类内创建一个building类的指针
};
class building {
friend class goodguy; //设置友元类
friend void goodguy::show(); //设置友元函数 本代码段取其一都可以运行
public:
building(); //构造函数空实现,类外再实现
string HomeRoom; //客厅
private:
string MyRoom; //私人房间
};
//类外来实现类内声明的构造函数,需要先写明作用域
goodguy::goodguy() {
build = new building;
}
building::building() {
HomeRoom = "客厅";
MyRoom = "私人房间";
}
void goodguy::show() {
cout << "你的好基友正在访问:" << build->HomeRoom << endl;
cout << "你的好基友正在访问:" << build->MyRoom << endl; //这里需要声明过友元才可以访问
}
void test1() {
goodguy gg;
gg.show();
}
int main() {
test1();
}