首页 > 编程语言 >C++ 面向对象编程:友元、

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

时间:2024-12-21 22:55:29浏览次数:10  
标签:友元 msg1 msg2 void People C++ People1 面向对象编程

友元:让一个类或函数,能够访问另一个类的私有成员。友元关键字为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;
}

标签:友元,msg1,msg2,void,People,C++,People1,面向对象编程
From: https://blog.csdn.net/qq_43355454/article/details/144621172

相关文章

  • 第十一章 C++ 循环
    有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了允许更为复杂的执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:......
  • 第十二章 C++ 判断
    判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。下面是大多数编程语言中典型的判断结构的一般形式:判断语句C++编程语言提供了以下类型的判断语句。点击链接查看每个语句的细节。语句......
  • 第十三章 C++ 函数
    函数是一组一起执行一个任务的语句。每个C++程序都至少有一个函数,即主函数main(),所有简单的程序都可以定义其他额外的函数。您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。函......
  • 用C++实现FILE的读写
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;#defineliujunchangreturn#definecode0#definecodes-1namespaceFile{ intOutAndReadFileVoid(constchar*FileNames,constintVoid){ if(Void==-1){ MessageBox(NULL,&q......
  • VC++ Windows Socket 传输文件
    服务端//服务端#include<cstdio>#include<cstdlib>#include<WinSock2.h>#include<Ws2tcpip.h>//inet_pton函数所在头文件#pragmacomment(lib,"ws2_32.lib")//加载ws2_32.dll#defineBUF_SIZE1024intmain(){ //检查文件是否存在 con......
  • 2024年华为OD机试真题-字符串变换最小字符串-C++-OD统一考试(E卷)
     最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,持续跟新。 题目描述࿱......
  • C++, sal.h的初见
    一路挖UE的Memcpy,不小心挖到了这个头文件sal.h。 成片的宏张牙舞爪,就像你应声开门以为是肯德基结果是佛伯乐的骇然 sal是什么呢?https://learn.microsoft.com/en-us/cpp/code-quality/understanding-sal?view=msvc-170全称是Microsoftsource-codeannotationlanguage......
  • 掌握DevEco Studio这一功能,高效实现ArkTS与C++胶水代码
    掌握DevEcoStudio这一功能,高效实现ArkTS与C++胶水代码1、背景介绍HarmonyOS主要提供了ArkTS与C++作为开发语言:ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,保持了TS的基本风格,同时通过规范定义强化开发期静......
  • HarmonyOS Next开发工具DevEco Studio介绍:ASan与TSan检测根治你的C++恐惧症
    1、背景介绍很多开发者面对C++都很犯怵,其中主要的一块就是内存操作。不合理的内存操作,比如数组越界、内存泄露、释放已释放的地址,可能会引起程序性能问题:内存消耗大,卡顿,更严重的会导致程序出现崩溃。当应用运行发生错误使应用进程终止时,应用将会抛出错误日志以通知应用崩溃......
  • 详解 C++ 中的无序容器
    在C++中,无序容器(unorderedcontainers)是指基于哈希表实现的容器,主要特点是元素存储顺序无关,强调高效的插入、删除和查找操作。以下是C++标准库中所有无序容器的详解。无序容器分类C++中的无序容器主要包括以下4类:unordered_setunordered_multisetunordered_mapun......