C++友元
友元
顾名思义:就是让一个函数或者类访问另一类中私有成员
三种方式:
1.全局函数做友元
2.类做友元
3.成员函数的友元
全局函数做友元
#include <iostream>
using namespace std;
class Person
{
friend void Friend1(Person *p);
public:
string appearance1;
Person()
{
appearance1 = "我宣你!";
heart1 = "不知道内心是否还宣你";
}
private:
string heart1;
};
// 定义一个全局函数
void Friend1(Person *p) // 注意:此处传入指针,只是为了指向对应Person的值,如果传入引用,那么就可以修改Person里面任意属性值
{
cout << "Surface" << p->appearance1 << "\n";
cout << "Heart1" << p->heart1 << "\n";
}
void test()
{
Person p;
Friend1(&p);
}
int main()
{
test();
return 0;
}
类做友元
内心OS:其实我不太写的惯这种写法
#include<iostream>
using namespace std;
class Building
{
friend class Goodgirl;
public:
Building();
public:
string m_sitting;
private:
string m_Bedroom;
};
class Goodgirl
{
public:
Goodgirl();
void visit();
private:
Building *building;
};
//把构造函数写出来
Building::Building()
{
m_Bedroom = "bedroom";
m_sitting = "sittingroom";
}
Goodgirl::Goodgirl()
{
building = new Building;
}
void Goodgirl::visit()
{
cout<<"hello"<<building->m_sitting<<"\n";
cout<<"HEllO"<<building->m_Bedroom<<"\n";
}
void test()
{
Goodgirl gl;
gl.visit();
}
int main()
{
test();
return 0;
}
成员函数的友元
提要点:
与类函数不同的是,成员函数可以有很多个,但是你需要指定一个成员函数进行friend声明,并且还要写上该成员函数出自哪个类
#include <iostream>
#include <string>
using namespace std;
class Person;
class GoodFriend
{
public:
GoodFriend();
void express_love(); // 让express_love可以不走进她的内心
void express_heart(); // 让express_heart可以访问她的内心
Person *person;
};
class Person
{
friend void GoodFriend::express_heart();//需要声明GoodFriend作为本类去访问私有权限
public:
string appearance1;
private:
string heart1;
public:
Person();
};
// 类外实现成员函数
Person::Person()
{
appearance1 = "我宣你";
heart1 = "我至今不敢明确我内心";
}
GoodFriend::GoodFriend()
{
person = new Person;
}
void GoodFriend::express_love()
{
cout << "你正在倾诉" << person->appearance1 << "\n";
}
void GoodFriend::express_heart()
{
cout << "你正在倾诉" << person->heart1 << "\n";
}
void test()
{
GoodFriend gd;
gd.express_love();
gd.express_heart();
}
int main()
{
test();
return 0;
}
本文来自博客园,作者:Alaso_shuang,转载请注明原文链接:https://www.cnblogs.com/Alaso687/p/18747928