热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

友元函数_C++学习摘要之六:友元函数与友元类

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C++学习摘要之六:友元函数与友元类相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了C++学习摘要之六:友元函数与友元类相关的知识,希望对你有一定的参考价值。






  第六章 友元函数与友元类



采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提供了工序的运行效率,但又破坏了类的封装性。


1.友元函数




友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:


friend 类型 函数名(形式参数);


友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。


一个函数可以是多个类的友元函数,不过需要在哥各个类中分别声明。


友元函数的调用与一般函数的调用方式和原理一致。


2.友元类




当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。定义友元类的语句格式如下:


friend class 类名;


其中:friend和class是关键字,类名必须是程序中的一个已定义过的类。


例如,以下语句说明类B是类A的友元类:


class A


{


   …


   public:


     friend class B;


   …


};


经过以上说明后,类B的所有成员函数都是类A的友元函数,且能存取类A的私有成员和保护成员。


注意:

(1)友元关系不具有对称性,即如果类B是类A的友元类,并不隐含类A是类B的友元类。

       (2)友元关系不具有传递性,即如果类B是类A的友元类,而类C是类B的友元类,这并不隐含类C是类A的友元类。 




推荐阅读
  • windows操作系统是什么Windows操作系统(别名:视窗操作系统),是由美国微软公司(Microsoft)研发的操作系统,问世于1985年。起初是MS-DOS模拟环境,后续由 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了2021年程序员的那些梗,你中招了吗?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • vscode文件头部注释插件
    插件里面安装在settings里面找到settings.json里面配置要注释的内容“fileheader.customMade”配置的是头部注释,“fileheader.curs ... [详细]
  • MFC中的文件读写操作
    由于要写个游戏工具方便编程,要用到文件类的操作,看到这篇文章不错,特转载计算机室如何管理自身所存放着的大量的信息的呢?win ... [详细]
  • 开发笔记:.NET 6 优先队列 PriorityQueue
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了.NET6优先队列PriorityQueue相关的知识,希望对你有一定的参考价值。在最近发布 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了text表相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 下载源码切换分支{代码}申明环境变量{代码}解决microbench工程编译问题报错信息{代码}解决办法批改pom.xml,显式援用jct包{代码}待续 ... [详细]
  •   作为一种编程语言,Python比C#,Java,C和C++更具吸引力。它被称为“胶水语言”,它也被喜欢它的程序员誉为“美丽”的编程语言。从云计算,客户端到物联网终端,Pytho ... [详细]
  • 1、tensorflow的基本运作为了快速的熟悉TensorFlow编程,下面从一段简单的代码开始:其中tf.mul(a,b)函数便是tf的一个基本的算数运算,接下来介绍跟 ... [详细]
  • neon serverless postgres 简单试用
    内容来自官方的docker-compose内容,主要是测试试用参考架构  从以上图可以看出,neon应该包含了几个组件,safekeeper,pageserver,计算节点,以及对 ... [详细]
  • python 对象锁_Python学习之进程和线程
    Python学习之进程和线程Python学习目录在Mac下使用Python3Python学习之数据类型Python学习之函数Python学习之高级特性Python学习之函数式编程P ... [详细]
  • 在网页上发布统计曲线(转)[more]一、引言在寥恋腎nte.NET上制作极富个性化的主页、及时发布令人心动的信息,以便吸引全世界不同肤色、不同职业的人们驻足观看,以致流连忘返 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了我眼中的CICD相关的知识,希望对你有一定的参考价值。前言本文基本就是Tho ... [详细]
  • 前言昨天,在本地安装Swoole调试环境的时候,遇到好几个坑,因为我的电脑是Windows系统,所以安装的是c ... [详细]
  • python语言编程——求最大公约数和最小公倍数算法[python基础]
    这道题经常能在选择题里出现,是最基础的python必考内容,关于这部分,只需要我们套用一串代码,不论输入什么内容都可以 ... [详细]
author-avatar
sweet佳楠名人博客
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有