首页 > 编程语言 >c++ friend关键字 友元

c++ friend关键字 友元

时间:2023-12-04 16:56:59浏览次数:37  
标签:友元 name 成员 c++ MyClass friend 函数

 

在C++中,friend关键字用于声明友元函数或友元类1。友元函数或友元类可以访问当前类的私有成员和保护成员,即使它们不是当前类的成员函数或成员类1

友元函数是一个独立的函数,而友元类是一个类可以访问另一个类的私有成员和保护成员1

例如,如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend3,如下所示:

class Box
{
    double width;
public:
    double length;
    friend void printWidth(Box box);
    void setWidth(double wid);
};

在这个例子中,printWidth函数就是Box类的友元函数,它可以访问Box类的所有私有(private)成员和保护(protected)成员3

另外,一个类的成员函数也可以是另一个类的友元4。例如:

class MyClass_B;

class MyClass_A
{
public:
    MyClass_A(string name)
    {
        m_name = name;
    }
    void Function(MyClass_B &myB);
private:
    string m_name;
};

class MyClass_B
{
public:
    MyClass_B(string name)
    {
        m_name = name;
    }
    friend void MyClass_A::Function(MyClass_B &myB);
private:
    string m_name;
};

void MyClass_A::Function(MyClass_B &myB)
{
    cout << myB.m_name << endl;
}

在这个例子中,MyClass_A的成员函数FunctionMyClass_B类的友元,因此它可以访问MyClass_B类的所有私有(private)成员和保护(protected)成员4

总的来说,friend关键字提供了一种机制,允许非成员函数或其他类访问类的私有或保护成员1。然而,使用friend关键字需要谨慎,因为它可能会破坏类的封装性4

 

标签:友元,name,成员,c++,MyClass,friend,函数
From: https://www.cnblogs.com/whcjob/p/17875362.html

相关文章

  • C++U5-08-二叉树1
    上节课作业分析讲解视频链接:https://pan.baidu.com/s/1_jaM_TlZmLJX4JbLuJtKzA?pwd=2us4提取码:2us4学习目标  树在C++中,二叉树是一种常用的数据结构,由节点(Node)组成,每个节点可以有最多两个子节点。二叉树具有以下几个主要的作用:存储和组织数据:二叉树可用于存储和组织大......
  • C++/Filesystem 文件类型
    #include<iostream>#include<filesystem>#include<string>namespacefs=std::filesystem;voiddemo_status(constfs::path&p,fs::file_statuss){std::cout<<p;switch(s.type()){casefs::file_type::none:......
  • C++U3-第3课-结构体
    上节课作业:链接:https://pan.baidu.com/s/1fBx8bS-J_FPDqBzn6Omp-g?pwd=1rn5提取码:1rn5学习目标在C++中,结构体(Struct)是一种用于组合多个相关数据项的自定义数据类型。结构体可以包含不同类型的成员变量和成员函数,并且可以通过.运算符来访问和操作它们。结构体在C++中具有以下......
  • C++-Python_多进程_多线程-协程-异步开发
    python多任务、并发编程等领域并发:宏观上并行,微观上串行并行:宏观上并行,微观上并行并发:I/O密集型作业运行态---阻塞态的转化并行:CPU密集型作业并发(Concurrent)、并行(Parallesim)、多线程(MultiThreaded)、多进程(Multiprocessing)、多任务(Multitasking)、......
  • 2.C语言和C++的几个标准(2023年12月4号)
    C语言和C++的区别C语言的设计理念:灵活、高效、性能极限C++的设计理念:面向对象为主 CPP:包含C语言(语法有微小差异)面向对象编程泛型编程STL标准模块库C++标准库 C语言是结构化语言:实例:我喜欢一个女孩C语言(......
  • C++中 enum 的使用
    C++中的枚举enum使用如果没有对应的范围限定,会很容易出现重定义的错误。如下的重定义错误,在一个文件中有如下两个枚举,编译时会出现重定义错误enumType{MIN_TYPE,MAX_TYPE,INPUT_TYPE};enumMode{CITY,INPUT_TYPE};此时虽然是不同的枚举类型,......
  • C++分解质因数代码实现
    一、问题描述:什么叫做分解质因数?就是我们给定一个数字,把这个数字的是质数的因子按照从小到大的顺序排列出来,并输出每个质因子的个数。二、实现思路:就是我们从1~n/i这个范围内(i*i=n),如果找到了一个因子,使得n%i==0,那么我们就进一步除下去,直到无法满足n%i==0为止。这个时候,i一定......
  • 深入理解C++继承(一)
    一、继承的概念及定义1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复......
  • C++ 返回函数指针的函数
    目录0前言1FunctionPointerinC/C++type1.1ordinaryfunctionPointer1.2non-staticmemberfunctionofclass1.3LambdaToFunctionPointer1.4总结什么是指针2ReturningafunctionpointerfromafunctioninC/C++3.C-VariableArguments(Variablelengtharg......
  • Qt/C++音视频开发57-切换音视频轨道/切换节目流/分别切换音频视频轨道
    一、前言对各种音视频文件格式的支持,是一个播放器的基础功能。一般的音视频文件只有1路流,比如音频文件只有1路音频流,视频文件只有1路音频1路视频流,实践过程中发现,还有一种ts格式的文件,可能有多路流,这种格式一般是将多路节目流封装到一个文件中,用户可以根据自己的需要切换不同的节......