众所周知类中的私有成员是无法在外部直接访问的,如果一定需要访问这些私有成员,那么在不利用类内已有的公共函数情况下,可以使用友元
1.全局函数作为友元
在Friend函数中,如果直接调用私有成员变量,程序报错
这时,将Friend设置为Building类的友元,就可以继续访问
运行结果:
这是Building类的共有成员变量A
这是Building类的私有成员变量B
2.类作为友元
#include<iostream>
using namespace std;
class Building{
friend class GoodGay;
public:
Building();
string m_livingroom;
private:
string m_bedroom;
};
Building::Building(){
m_livingroom="客厅";
m_bedroom="卧室";
}
class GoodGay{
public:
GoodGay();
void visit();
private:
Building *building;
};
GoodGay::GoodGay(){
building=new Building;
}
void GoodGay::visit(){
cout<<"这是Building类中的公有成员变量"<<building->m_livingroom<<endl;
cout<<"这是Building类中的私有成员变量"<<building->m_bedroom<<endl;
}
int main(){
GoodGay g1;
g1.visit();
}
将一个类作为另一个类的友元,这样前一个类创建的对象就可以访问后一个类的私有成员变量
3.类的成员函数作友元
#include<iostream>
using namespace std;
class GoodGay;
class Building{
friend void GoodGay::visit1();
public:
Building();
string m_livingroom;
private:
string m_bedroom;
};
Building::Building(){
m_livingroom="客厅";
m_bedroom="卧室";
};
class GoodGay{
public:
GoodGay();
void visit1();//visit1可以访问Building类的私有成员
void visit2();//visit2不可以访问Building类的私有成员
private:
Building* building;
};
GoodGay::GoodGay(){
building=new Building;
}
void GoodGay::visit1(){
cout<<"这是visit1"<<endl;
cout<<"这是Building类中的公有成员变量"<<building->m_livingroom<<endl;
cout<<"这是Building类中的私有成员变量"<<building->m_bedroom<<endl;
}
// void GoodGay::visit2(){
// cout<<"这是Building类中的公有成员变量"<<building->m_livingroom<<endl;
// //cout<<"这是Building类中的私有成员变量"<<building->m_bedroom<<endl;
// }
int main(){
GoodGay g1;
g1.visit1();
}
这样,可以单独将类的一个成员函数作为友元