友元函数
简介:在程序里面有些私有属性也想让类外的函数或类去访问,就需要用到友元函数。友元的目的就是让一个函数或类的成员去访问另一个类的私有成员。如同两个陌生人强制建立友谊,瞬间感情升温变成好朋友。
关键字:friend 用三个程序解释三种方法
1.全局函数做友元
#include"iostream"
using namespace std;
class Person
{
friend void friend_people(Person *p);
public:
string y_name="yang"; //你的名字
private:
string y_telephone_password="123456"; //你的手机密码
};
void people(Person *p)
{
cout<<"陌生人可以知道你的名字"<<p->y_name<<endl;
// 因为没有friend关键字的定义 所以这个全局函数不能调用私有成员
// cout<<"陌生人可以知道你的手机密码"<<p->y_telephone_password<<endl;
}
void friend_people(Person *p)
{
cout<<"好朋友知道你的手机密码"<<p->y_name<<endl;
cout<<"好朋友知道你的手机密码"<<p->y_telephone_password<<endl;
}
int main()
{
Person p1;
people(&p1);
friend_people(&p1);
return 0;
}
2.类做友元
#include"iostream"
using namespace std;
class house
{
//这样定义以后 在Goodfriend这个类的函数中就可以调用house这个类中的私有成员
friend class Goodfriend;
public:
house();
string house_saloon; //客厅
private:
string house_bedroom; //卧室
};
house::house()
{
house_saloon="客厅";
house_bedroom="卧室";
}
class Goodfriend
{
public:
void visit();
house *ho;
Goodfriend();
};
Goodfriend::Goodfriend()
{
ho=new house;
}
void Goodfriend::visit()
{
cout<<"你的好朋友去你的"<<ho->house_saloon<<endl;
cout<<"你的好朋友去你的"<<ho->house_bedroom<<endl;
}
void test()
{
Goodfriend GF;
GF.visit();
}
int main()
{
test();
return 0;
}
3.类内成员函数做友元
#include"iostream"
#include"string.h"
using namespace std;
class house;
class goodfriend
{
public:
void visit1(); //做友元函数参观卧室
void visit2(); //做普通函数参观客厅
house *ho; //准备接收在堆区开辟一块house类的空间
goodfriend();
};
class house
{
friend void goodfriend::visit1();
public:
house();
string house_saloonroom; //客厅
private:
string house_bedroom; //卧室
};
house::house()
{
house_saloonroom="客厅";
house_bedroom="卧室";
}
goodfriend::goodfriend()
{
ho=new house; //在堆区开辟一块house类的空间
}
void goodfriend::visit1()
{
cout<<"好朋友参观你的"<<ho->house_bedroom<<endl;
}
void goodfriend::visit2()
{
cout<<"好朋友参观你的"<<ho->house_saloonroom<<endl;
}
int main()
{
goodfriend GF;
GF.visit1();
GF.visit2();
return 0;
}