C++ 面向对象编程:友元、

友元:让一个类或函数,能够访问另一个类的私有成员。友元关键字为friend。

友元有三种:第一种是全局函数作为友元,第二种是类作为友元,第三种是成员函数作为友元

第一种是全局函数作为友元,见以下代码:

#include<iostream>

#include<string>

using namespace std;

class People {

friend void getfriendmsg(People* p);

public:

People() {

msg1 = "aa";

msg2 = "bb";

}

public:

string msg2;

private:

string msg1;

};

void getfriendmsg(People *p) {

cout << p->msg2 << endl;

cout << p->msg1 << endl;

}

int main() {

People p;

return 0;

}

第二种是类作为友元,让另一个类去访问类的私有变量,可见以下代码:

#include<iostream>

#include<string>

using namespace std;

class People;

class People1 {

public:

People1() {

}

void getmsg(People* p);

};

class People {

friend class People1;

public:

People() {

msg1 = "aa";

msg2 = "bb";

}

public:

string msg2;

private:

string msg1;

};

void People1::getmsg(People* p) {

cout << p->msg2 << endl;

cout << p->msg1 << endl;

}

int main() {

People p;

People1 p1;

p1.getmsg(&p);

return 0;

}

第三种是成员函数作为友元

#include<iostream>

#include<string>

using namespace std;

class People;

class People1 {

public:

People1() {

}

void getmsg2(People* p);

void getmsg12(People* p);

};

class People {

friend void People1::getmsg12(People* p);

public:

People() {

msg1 = "aa";

msg2 = "bb";

}

public:

string msg2;

private:

string msg1;

};

void People1::getmsg12(People* p) {

cout << p->msg2 << endl;

cout << p->msg1 << endl;

}

void People1::getmsg2(People* p) {

cout << p->msg2 << endl;

}

int main() {

People p;

People1 p1;

p1.getmsg2(&p);

p1.getmsg12(&p);

return 0;

}

相关推荐
在线OJ的阿川2 分钟前
仿muduo库实现高并发服务器
linux·服务器·c++
北冥you鱼6 分钟前
Go Modules 使用指南:从入门到精通
开发语言·后端·golang
l1t10 分钟前
duckdb 1.6dev新增的.manual命令
开发语言·数据库
你怎么知道我是队长16 分钟前
JavaScript的函数介绍
开发语言·前端·javascript
坚定学代码19 分钟前
C++ SOLID 原则(上):单一职责、开闭原则与里氏替换
c++
YMWM_22 分钟前
python-venv虚拟环境
linux·开发语言·python
ysa05103034 分钟前
【板子】欧拉序
c++·笔记·算法·深度优先·图论
不负岁月无痕37 分钟前
STL -- C++ 红黑树封装 Map 和 Set
java·c语言·开发语言·c++·面试
小园子的小菜42 分钟前
Java核心基础:反射与泛型底层原理及实战用法详解
java·开发语言
初学者,亦行者44 分钟前
算法设计与分析:动态规划 - TSP问题和0-1背包问题
c++·算法·动态规划