博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thinking in C++ Notes 多态和虚函数
阅读量:6253 次
发布时间:2019-06-22

本文共 687 字,大约阅读时间需要 2 分钟。

hot3.png

  1. C++通过virtual关键字实现晚绑定,即运行时绑定。
  2. vtable是一个指针,对于一个类唯一的指向了对象地址,vatble会被拷贝继承。
  3. 纯虚函数的vtable是空置的,无法直接被实例化。方法声明后加 = 0
  4. 虚函数禁止使用传值调用,防止产生对象切片。即传值的时候,函数只会对父类的函数加以拷贝,而丢弃子类的属性和方法,从而拷贝为一个父类的对象。使用纯虚函数可以编译器报错避免这一点,因为父类无法实例化。
  5. RTTI是通过向下类型转化实现的,即通过强制类型转化调用派生类特有的方法
  6. 虚函数重载时需要注意两点:1. 子类无法创建新的同名,不同参数或返回值(返回子类对象的情况除外p384)的函数,为了保持多态特性,从而使得子类对象可以通过基类调用。2. 父类有多个同名函数,子类重载其中一个,则剩余的会被隐藏,除非向上转换为基类。
  7. 基类的构造函数会在派生类初始化的时候调用。
  8. 构造函数和析构函数中调用的虚函数是当前类的函数,而不使用虚机制。因为构造顺序的原因,基类调用虚函数会使用派生类中没有初始化的属性,这是不允许的。因为此时,派生类的构造函数还未执行。 而对于析构函数,假如使用虚机制,派生类的析构函数和父类析构函数调用的虚函数可能会析构统一对象,从而造成错误。
  9. 纯虚析构函数满足在一个类不需要实例化,但是却没其他的函数可以定义为纯虚函数的时候,此时纯虚析构函数需要有一个定义。
  10. 运算符重载也可以是虚函数
  11. typeinfo RTTI 以及相关的动态类型转换以及静态类型转换

转载于:https://my.oschina.net/edwardpku/blog/116909

你可能感兴趣的文章
java嵌套类(Nested Classes)总结
查看>>
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
查看>>
php 自带过滤和转义函数
查看>>
javascript一些小技巧
查看>>
android 使用HttpURLConnection方式提交get/post请求
查看>>
CTR预估中GBDT与LR融合方案
查看>>
I00024 出钱买羽
查看>>
原生js实现点击下载图片
查看>>
WinCE winform 开发注意事项
查看>>
linux下文件的一些文件颜色的含义
查看>>
OLTP系统的Oracle RAC性能调优,索引分区极大提升提交性能
查看>>
Leetcode | Binary Tree Zigzag Level Order Traversal
查看>>
websotrm注册码
查看>>
迭代器(Iterable)和for..in..的三种协议
查看>>
Gephi可视化(一)——使用Gephi Toolkit创建Gephi应用
查看>>
判断浏览器是否为顶层窗口
查看>>
数据结构化与保存
查看>>
跨域iframe高度自适应(兼容IE/FF/OP/Chrome)
查看>>
没有发布过产品的程序员不知道什么是真正的软件
查看>>
图论 - Travel
查看>>