- 全局函数作友元
#include<iostream>
#include<stdio.h>
#include <string>
//全局函数作友元访问私有的
using namespace std;
class Buliding {
friend void GoodGay(Buliding& buliding);
public:
Buliding() {
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
public:
string m_SittingRoom;//客厅
private:
string m_BedRoom;//卧室
};
void GoodGay(Buliding& buliding)
{
cout << "好基友正在访问:" << buliding.m_SittingRoom;
cout << "好基友正在访问:" << buliding.m_BedRoom;
}
void test01() {
Buliding buliding;
GoodGay(buliding);
}
int main() {
test01();
return 0;
}
- 友元类
可以访问私有和保护的对象,当然公有更可以
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
class GoodGay;
class Building {
friend GoodGay;
public:
Building() {
m_SittingRoom = "客厅";
m_BedRoom = "卧室";
}
string m_SittingRoom;//客厅
protected :
int a=100;
private:
string m_BedRoom;//卧室
};
class GoodGay {
public:
GoodGay() {
m_building = new Building;
}
void visit()
{
cout << "好基友类正在访问:" << m_building->m_SittingRoom<<endl;
cout << "好基友类正在访问:" << m_building->m_BedRoom << endl;
cout << m_building->a;
}
Building *m_building;
};
void test01() {
GoodGay a;
a.visit();
}
int main() {
test01();
return 0;
}
- 成员函数做友元
与全局函数做友元类似只是要加上作用域
#include<iostream>
#include <stdio.h>
#include <string>
using namespace std;
class Building;
class goodGay
{
public:
goodGay();
void visit(); //只让visit函数作为Building的好朋友,可以发访问Building中私有内容
void visit2();
private:
Building *building;
};
class Building
{
//告诉编译器 goodGay类中的visit成员函数 是Building好朋友,可以访问私有内容
friend void goodGay::visit();//**
public:
Building();
public:
string m_SittingRoom; //客厅
private:
string m_BedRoom;//卧室
};
Building::Building()
{
this->m_SittingRoom = "客厅";
this->m_BedRoom = "卧室";
}
goodGay::goodGay()
{
building = new Building;
}
void goodGay::visit()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void goodGay::visit2()
{
cout << "好基友正在访问" << building->m_SittingRoom << endl;
//cout << "好基友正在访问" << building->m_BedRoom << endl;
}
void test01()
{
goodGay gg;
gg.visit();
}
int main(){
test01();
return 0;
}