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)相关推荐

  1. (侯捷C++)1.1面向对象高级编程(上)

    一.C++编程简介 1.C++历史 B语言 → C语言 → C++语言(new C → C with Class → C++) 面向对象的语言:C++.Java.C# 2.C++演化 C++ 98(1 ...

  2. (侯捷C++)1.2面向对象高级编程(上)

    1.整体结构 2.三大函数:拷贝构造,拷贝赋值,析构 拷贝构造:第一次出现对象,使用拷贝构造进行创建,例如:String s3(s1). 拷贝赋值:对象已经构造,重新赋值,例如s3 = s2. 编译器 ...

  3. 侯捷C++个人学习笔记面向对象Part2

    目录 conversion function,转换函数 one-argument ctor,仅需要一个实参的构造函数 non-explicit,不明确的 explicit,明确的 pointer-li ...

  4. 侯捷C++课程笔记01: 面向对象高级编程(上)

    本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(上) pdf版本笔记的下载地址: 笔记01_面向对象高级编程(上),排版更美观一点(访问密码:3834) 侯捷C++课程笔记01: 面向对象高 ...

  5. 侯捷C++课程笔记02: 面向对象高级编程(下)

    本笔记根据侯捷老师的课程整理而来:C++面向对象高级编程(下) pdf版本笔记的下载地址: 笔记02_面向对象高级编程(下),排版更美观一点(访问密码:3834) 侯捷C++课程笔记02: 面向对象高 ...

  6. 侯捷老师 c++面向对象编程(上)

    (本博客是笔者根据侯捷老师的课程进行的总结,便于自己复习,也分享于网上,便于和更多人学习交流,若有侵权,请告删,若有误,请不吝赐教)(图来自于pdf文档,需要的朋友可以在评论区留言) 主要分为两章: ...

  7. C++ 面向对象笔记——侯捷老师(一)

    此笔记为侯捷老师的C++面向对象课程笔记,在开篇中,老师首先讲C++的类,并将类分为两种基本类型: 1.类的成员不带指针的类.以复数类为例,讲解类的基本知识. 类的基本构成:成员变量和成员函数.构造函 ...

  8. 侯捷老师-02面向对象高级编程

    侯捷老师-02面向对象高级编程 1.Static使用 Static本质 Static使用 Static使用举例-单例模式 Static使用举例-单例模式(改进) 2.模板使用 Class Templa ...

  9. 侯捷老师-01面向对象高级编程

    侯捷老师-01面向对象高级编程 01面向对象高级编程 1.编程习惯 总结 2.三大函数 2.1 拷贝构造函数.拷贝赋值函数.析构函数(带有指针的类) 2.2 构造函数.析构函数 局部变量.全局变量 3 ...

最新文章

  1. NOIP模拟题——dun
  2. gitlab远程提交
  3. Echarts中Option属性设置
  4. ubuntu上有个小项目 ,需要调用xx.sh脚本, 出现无法识别 某些环境变量的解决办法,仅供参考
  5. deno mysql_从 Node 到 Deno
  6. (05)FPGA内部资源
  7. oracle数据库简单的学多久,讲讲新人的oracle数据库学习
  8. 如何限制计算机游戏,如何禁止玩电脑游戏、屏蔽网络游戏方法
  9. 计算机excel求四分位数,四分位数怎么算excel?
  10. Alexnet输入大小227x227能否调整,kernel_size偶数有什么影响。
  11. 创维电信悦me,(YMB0300-CW)卡刷固件及教程
  12. 服务器被劫持怎么修复不了,电脑DNS被劫持怎么修复?电脑dns被劫持的完美解决方法...
  13. 腾讯大王卡免费申请工具 申请入口_一键申请 低价流量卡办理入口
  14. AngularJs实现增加订单、批量发货
  15. 英特尔高管晒照片不小心泄密
  16. OpenLayers使用
  17. 比特币钱包开发:通过助记词扩展子地址的原理与编码
  18. 配置NFS服务器和NFS客户端
  19. 走进微信公众号实现关注之后推送一条服务器自定义的消息给用户
  20. 华为浏览器不能看html5视频,解决nixos中vivaldi浏览器无法播放html5视频的问题

热门文章

  1. 正确打开adams软件_仿真软件ADAMS安装完成后无法启动应该如何处理?
  2. mysql 关键字是什么_mysql关键字有哪些
  3. 为什么说多功能智慧路灯杆是智慧城市大数据采集的入口?
  4. 一种简单快速有效的图像暗部增强/亮度均衡算法
  5. Unity3d 官方角色换装Demo源代码学习
  6. 学习springBoot(七,进阶篇)
  7. 命令行CMD切换路径(从c盘切换到其他文件夹下载东西)
  8. 基于神经网络的推荐算法,协同过滤推荐算法python
  9. python pipe模块用法
  10. 你认为喜剧演员何欢什么时候会走红?