Thinking in C++ Notes 多态和虚函数

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值