当前位置: 首页 > article >正文

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;
}


http://www.kler.cn/a/446965.html

相关文章:

  • imu相机EKF
  • 浏览器要求用户确认 Cookies Privacy(隐私相关内容)是基于隐私法规的要求,VUE 实现,html 代码
  • PHP接入美团联盟推广
  • electron-vite【实战系列教程】
  • cenos如何升级git到2以上版本
  • redis数据类型:list
  • JMeter HTTP Cookie管理器(HTTP Cookie Manager)
  • D100【python 接口自动化学习】- pytest进阶之fixture用法
  • Java开发经验——数据库开发经验
  • clickhouse优化记录
  • 华为DHCP高级配置学习笔记
  • 数据结构_赫夫曼树(基于例题)
  • 【杂谈】虚拟机与EasyConnect运行巧设:Reqable助力指定应用流量专属化
  • 软件需求分析常见误区(三),瀑布模型中需求分析遇到的问题
  • ScottPlot学习的常用笔记-02
  • 《SIFT 算法及原理详解》
  • Verilog中initial的用法
  • 使用C语言编写UDP循环接收并打印消息的程序
  • 云手机:超越常规认知的多功能利器
  • Vue3之路由(Router)介绍
  • [论文阅读]Universal and transferable adversarial attacks on aligned language models
  • MapReduce的shuffle过程详解
  • 【论文阅读】Deep Neural Network Pruning Using Persistent Homology
  • iClient3D for Cesium 实现限高分析
  • 【AI学习】Huggingface复刻Test-time Compute Scaling技术
  • uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决