| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++】-- 友元 -> 正文阅读 |
|
[C++知识库]【C++】-- 友元 |
目录 ? 一、为什么要使用友元对于自定义类型Date类,为了打印Date类的对象,需要我们自己在Date类中写打印函数:
而内置类型在不写打印重载函数的情况下却能够直接打印:
这是因为库里面对内置类型写了许多运算符重载函数,包括operator>>和operator<<并且能够自动识别类型构成重载,所以内置类型直接能调打印。而自定义类型需要自己写打印函数。 假如库里面对内置类型没有写operator>>和operator<<重载,对于自定义的Date类那就只有在类中自己写operator>>和operator<<重载函数了:
但是用cout<<d1却调用不了<<运算符: 我们需要的是cout<<d1,但是调用operator<<实际上执行的是:
d1作为this就变成了第一个参数,main函数里面的调用应该是d1<<cout,编译通过:
但是d1<<cout的调用不符合我们的习惯,可读性不高,我们需要cout作为第一个参数,这样就会造成d1和cout抢占第一个参数的问题。假如把operator>>和operator<<重载不写在类里面,而是写成全局函数写在Date类外面,我们可以指定参数顺序:
?但会带来访问不了私有成员变量的问题: 如何能够访问到类的私有成员变量,突破类域呢?-------使用友元,友元提供了一种突破封装的方式。友元分为友元函数和友元类。 二、友元函数1.友元函数定义?友元函数是定义在类外部的普通函数,不属于任何类,但可以直接访问类的私有成员,需要在类的内部使用friend关键字进行声明,类就会把友元函数当作类里面的成员。
2.友元函数特性(1)友元函数可访问类的私有和保护成员,但不是类的成员函数 (2)友元函数不能用const修饰(const修饰this指针指向的内容,友元函数作为全局函数没有this指针) (3)友元函数可以在类定义的任何地方声明,不受类访问限定符限制 (4)一个函数可以是多个类的友元函数 (5)友元函数的调用与普通函数的调用和原理相同 三、友元类1.友元类定义友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。如下Date类是Time类的友元类,Date类要访问Time类,就要把Date类定义成Time类的友元:
2.友元类特性(1)友元关系是单向的,不具有交换性。 在Time类中,声明Date?类是其友元类,可以在Date类中直接访问Time类的私有成员。但不能在Time中访问Date类中的私有成员。 (2)友元关系不能传递 A是B的友元,B是C的友元,但A不是C的友元。 四、总结A无论是类还是全局函数,只要A被定义为B的友元,A就可以访问B的非公有成员。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 21:55:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |