C++学习笔记系列四
- 友元之普通函数(非成员函数,自由函数)
- 友元之成员函数,,用到类的前向声明---->声明的是一个不完全的类。
- 友元之类。friend Line 或friend class Line
- 友元关系是单向的关系。不能传递,是不可继承的。
- 只有两个有强相关的时候,才使用,一般不使用。
- 不能重载的运算符有: (带点的不能重载)
- 成员访问符 .
- 成员指针访问运算符 .*
- 域运算符 ::
- 长度运算符 sizeof
- 条件运算符号 ?:
- 不能对内置类型的运算符进行重载
- 重载操作符必须具有一个自定义类类型或者是枚举类型的操作数 int operator+(int, int);//不能重载
- 优先级和结合性是固定的,操作符的优先级、结合性或操作数个数不能改变 X == Y + Z;
- += -= 建议使用成员函数重载。 -->对于复合赋值运算符。自增,自减运算符。(对于重载来说,前置++,更容易实现,可以返回& ,complex & operator++( )。对于后置++ 不能返回引用了,写成,Complex operator ++(int) //int不代表一个参数,只是作为一个标志,与前置++做区别) 所以,能够使用前置的时候,就不要使用后置。(因为前置++ 的效率高于后置++)特别是在迭代器的时候。
- 对于+ - * 、可以使用自由函数或friend重载。
- 对于绝大多数可重载操作符来说,两种重载形式都是允许的。但对下标运算符[] 、赋值运算符=、函数调用运算符()、指针运算符->,只能使用成员函数形式。
- 函数调用运算符()同样只能重载为成员函数形式,返回类型 operator()(arg1,arg2,……) 参数个数可以有多个,没有限制。 这里的对象是一个函数对象,它是重载了函数调用运算符的类创建的对象。
- 下标运算符[ ] 返回类型& operator[ ](参数类型); 下标运算符的重载函数只能有一个参数,不过该参数并没有类型限制,任何类型都可以,如果类中未重载下标运算符,编译器将会给出下标运算符的缺省定义。
- 输入>> 输出 <<的重载
- 输入输出流运算符第一个参数要求是流类型(ostream , istream) ,而如果作为成员函数存在,则它的第一个参数是this 指针,故不能以成员函数重载,建议以自由函数,且为友元函数。
- 流对象是不能进行复制的。故只能返回引用。不能返回一个类型。
- 注意参数类型时i,不修改的才能加const ,要修改的不能加const 。
- 指针运算符 -> 和 * 的重载
- 在智能指针时,还会讲解,有应用。
- 类型转换
- 转换场合有:
- 赋值转换 表达式中的转换 显式转换
- 函数调用,
- 传递参数时的转换
- 转换方向有:
- 由定义类向其他类型的转换
- 由其他类型向定义类的转换
- 由其他类型(如int、double)等向自定义类的转换是由构造函数来实现的
- 类型转换函数
- 在类中定义类型转换函数的形式一般为:
- operator 目标类型名();
- 有以下几个使用要点:
- 转换函数必须是成员函数,不能是友元形式。
- 转换函数不能指定返回类型,但在函数体内必须用return语句以传值方式返回一个目标类型的变量。
- 转换函数不能有参数
- 尽量不要多使用,违反直觉思维的。
- 类作用域
- 在类中定义的成员变量和成员函数的作用域是整个类
- (1)全局作用域 在函数和其他类定义的外部定义的类称为全局类
- (2)类作用域(类中类、嵌套类) 一个类可以定义在另一类的定义中,这是所谓嵌套类,---> 嵌套类可以用来封装。
- PIMPL设计模式 ---->了解一下。
- 实现信息隐藏
- 能够保证接口的稳定性,内部的实现做任何变化都不会影响使用该头文件的程序,可以最小的变化做到平滑升级库的目的。
- 减小编译的依赖。
- 块作用域 类的定义在代码块中,这是所谓局部类,该类完全被块包含,其作用域仅仅限于定义所在块,不能在块外使用类名声明该类的对象
- 我们把引用计数放在堆上面,采用将引用计数放在字符串的‘\0’的后一位。
- 引用计数加减一,用函数封装,在复制构造函数时需要先浅拷贝,在加一。
- 赋值运算符,如果不是自赋值,先左操作数,引用计数减一,判断是否为0,若是,在delete ,浅拷贝,在右操作数计数加一。在返回。
- 用 [ ]重载后,用来修改,如果引用大于1,就原来引用减去1,然后开空间,在去复制,,在浅拷贝(修改指向),在初始化新的引用计数。
C++学习笔记系列四相关推荐
- Android学习笔记系列四2 —— Activity的生命周期
2019独角兽企业重金招聘Python工程师标准>>> 启动一个Activity 使用startActivity(Intent intent). intent指定了你想要启动的act ...
- SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引
SQL Server 2008中的一些特性总结及BI学习笔记系列,欢迎与邀月交流. 3w@live.cn ◆0.SQL应用系列 1.SQL Server 2008中SQL增强之一:Values新用途 ...
- 步步为营 .NET 设计模式学习笔记系列总结
设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...
- BizTalk学习笔记系列之二:实例说明如何使用BizTalk
BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...
- SQLServer学习笔记系列2
SQLServer学习笔记系列2 一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继 ...
- Windows x64内核学习笔记(四)—— 9-9-9-9-12分页
Windows x64内核学习笔记(四)-- 9-9-9-9-12分页 前言 9-9-9-9-12分页 实验一:线性地址转物理地址 页表基址 定位基址 PTE to PXE 实验二:通过页表基址定位各 ...
- Intel VT学习笔记(四)—— VMCS(下)
Intel VT学习笔记(四)-- VMCS(下) 要点回顾 VM-Exit Information Guest state fields 代码实现 参考资料 要点回顾 在上一篇中,我们了解了如何设置 ...
- 数据结构学习笔记(四):重识数组(Array)
目录 1 数组通过索引访问元素的原理 1.1 内存空间的连续性 1.2 数据类型的同一性 2 数组与链表增删查操作特性的对比 2.1 数组与链表的共性与差异 2.2 数组与链表增删查特性差异的原理 3 ...
- 《Go语言圣经》学习笔记 第四章 复合数据类型
<Go语言圣经>学习笔记 第四章 复合数据类型 目录 数组 Slice Map 结构体 JSON 文本和HTML模板 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. ...
最新文章
- java startswith忽略大小写_Java String startsWith()方法与示例
- 【Linux】一步一步学Linux——jobs命令(129)
- 双曲线和直线联立公式_圆锥曲线联解公式
- PHP苹果不给上架,苹果商城上架拒绝
- 面向对象(OOP)一
- DreamFactory入门指南
- 网友调侃特斯拉股价要冲向火星 马斯克:疯狂的时代
- json.decoder.JSONDecodeError: Expecting ‘,‘ delimiter: line xx column xx (char xxx)
- Matlab rand randn randint
- mysql时间总结_MYSQL日期时间总结
- net.java.html.boot.BrowserBuilder
- 河南省邓州市计算机学校,2019年邓州市职业技术学校招生简章及招生专业
- 加解密:MD5DesAesRSARSA C#和Java适配
- C#中背景图片布局设置
- POJ 3580 SuperMemo(伸展树的几个基本操作)
- 基于OXC的光电联动全光网组网方案研究与实践
- 移动硬盘损坏怎么恢复?看完再也不怕丢失数据
- 基于springboot+jsp的服装穿搭信息管理系统
- c语言控制台数字键打地鼠,C语言编程打地鼠
- FTP上传下载端口号
热门文章
- HDU 4027 Can you answer these queries?(线段树/区间不等更新)
- git revert
- 如何在android模拟器中安装apk
- 通过修改explorer.exe内存隐藏文件及注册表项
- webp转换gif_用 WebP 创建尺寸更小、细节更丰富的图片,以此来提高网站的速度...
- java程序员_Java和Python的区别 好程序员帮大家解读
- 游戏笔记本计算机购买,2021大学生买电脑,容易犯的七种错误!游戏本和轻薄本买哪个?...
- java中数据类型转换、ASCII编码
- CentOS 7安装Development Tools 失败 报错 group tools does not exist. Maybe run: yum groups mark install
- MySQL高级篇(事务视图存储过程与函数)