侯捷老师c++课程笔记 (面向对象高级编程7)
1动态绑定与静态绑定
把B的对象b强转为A类,那么调用的A的虚函数还是B的虚函数? 这是通过对象来调用,不是通过指针来调用,所以是静态绑定,用call +函数地址来调用,调用的是A的虚函数
pa->vfunc1() 符合动态绑定的三个条件 1 用指针调用 2 向上转型(父类指针指向子类对象) 3 是虚函数 call+指针
2const关于cow的应用
const:常量对象不能调用非常量函数,这点前面老师说过好几次,出错的时候很难检查出来。 const也算函数签名的一部分:函数重载的时候不看返回值类型,只看函数签名,即参数数量和类型是否一致,如果都一致就不叫重载,叫重名,会报错,但const也算函数签名的一部分,如果参数数量和类型一致,但是一个有const一个没const,也算重载。
string copy 时是共享一个string,但当其中一个要改的时候,会临时copy一个用来写(即copy on write),所以标准库里string必须考虑cow,那么当常量字符串调用[],比如const str[5],那么就不用考虑cow,所以标准库要把这种情况区分开来,这才有了两个重载[]的函数。这样一来常量对象只能调用常量成员函数,但非常量对象可以调用常量成员函数和非常量成员函数,为了避免这种情况,所以c++还有条规则,就是那条灰色框框。
3重载new delete
::operator new 重载全局的new,风险很大,因为很多其他函数都会用到
根据原来讲的new和delete需要分成三步和两步,下面例子说明了就算重载了new和delete,前面的步骤没变。
4重载new[]和delete[]
蓝色框里如果无成员函数重载的new和delete则调用全局的new和delete,若有则用成员函数重载的new和delete,若调用::new则是强制调用全局的
每个元素为4(int)+4(long)+4(string)=12个字节,数组元素为5,那么sizeof(Foo)=12x5=60,为什么是64呢,因为分配内存的时候多出了一个大小为4字节记录数组元素个数的内存,如果是虚函数那么就多了根虚指针,每个元素就是16个字节,sizeof()后就是16x5+4=84 ,construct(构造)是从上到下,destruct(析构)是从下到上。
5 不同版本的重载new delete
侯捷老师c++课程笔记 (面向对象高级编程7)相关推荐
- (侯捷C++)1.1面向对象高级编程(上)
一.C++编程简介 1.C++历史 B语言 → C语言 → C++语言(new C → C with Class → C++) 面向对象的语言:C++.Java.C# 2.C++演化 C++ 98(1 ...
- (侯捷C++)1.2面向对象高级编程(上)
1.整体结构 2.三大函数:拷贝构造,拷贝赋值,析构 拷贝构造:第一次出现对象,使用拷贝构造进行创建,例如:String s3(s1). 拷贝赋值:对象已经构造,重新赋值,例如s3 = s2. 编译器 ...
- 侯捷C++个人学习笔记面向对象Part2
目录 conversion function,转换函数 one-argument ctor,仅需要一个实参的构造函数 non-explicit,不明确的 explicit,明确的 pointer-li ...
- 侯捷C++课程笔记01: 面向对象高级编程(上)
本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(上) pdf版本笔记的下载地址: 笔记01_面向对象高级编程(上),排版更美观一点(访问密码:3834) 侯捷C++课程笔记01: 面向对象高 ...
- 侯捷C++课程笔记02: 面向对象高级编程(下)
本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(下) pdf版本笔记的下载地址: 笔记02_面向对象高级编程(下),排版更美观一点(访问密码:3834) 侯捷C++课程笔记02: 面向对象高 ...
- 侯捷老师 c++面向对象编程(上)
(本博客是笔者根据侯捷老师的课程进行的总结,便于自己复习,也分享于网上,便于和更多人学习交流,若有侵权,请告删,若有误,请不吝赐教)(图来自于pdf文档,需要的朋友可以在评论区留言) 主要分为两章: ...
- C++ 面向对象笔记——侯捷老师(一)
此笔记为侯捷老师的C++面向对象课程笔记,在开篇中,老师首先讲C++的类,并将类分为两种基本类型: 1.类的成员不带指针的类.以复数类为例,讲解类的基本知识. 类的基本构成:成员变量和成员函数.构造函 ...
- 侯捷老师-02面向对象高级编程
侯捷老师-02面向对象高级编程 1.Static使用 Static本质 Static使用 Static使用举例-单例模式 Static使用举例-单例模式(改进) 2.模板使用 Class Templa ...
- 侯捷老师-01面向对象高级编程
侯捷老师-01面向对象高级编程 01面向对象高级编程 1.编程习惯 总结 2.三大函数 2.1 拷贝构造函数.拷贝赋值函数.析构函数(带有指针的类) 2.2 构造函数.析构函数 局部变量.全局变量 3 ...
最新文章
- NOIP模拟题——dun
- gitlab远程提交
- Echarts中Option属性设置
- ubuntu上有个小项目 ,需要调用xx.sh脚本, 出现无法识别 某些环境变量的解决办法,仅供参考
- deno mysql_从 Node 到 Deno
- (05)FPGA内部资源
- oracle数据库简单的学多久,讲讲新人的oracle数据库学习
- 如何限制计算机游戏,如何禁止玩电脑游戏、屏蔽网络游戏方法
- 计算机excel求四分位数,四分位数怎么算excel?
- Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。
- 创维电信悦me,(YMB0300-CW)卡刷固件及教程
- 服务器被劫持怎么修复不了,电脑DNS被劫持怎么修复?电脑dns被劫持的完美解决方法...
- 腾讯大王卡免费申请工具 申请入口_一键申请 低价流量卡办理入口
- AngularJs实现增加订单、批量发货
- 英特尔高管晒照片不小心泄密
- OpenLayers使用
- 比特币钱包开发:通过助记词扩展子地址的原理与编码
- 配置NFS服务器和NFS客户端
- 走进微信公众号实现关注之后推送一条服务器自定义的消息给用户
- 华为浏览器不能看html5视频,解决nixos中vivaldi浏览器无法播放html5视频的问题