202012 16小结

小结


什么是多态?
简单说来,多态就是一种接口,多种方法。
多态分为编译期多态和运行期多态。编译器多态是指在编译期确定调用的函数,也称为静态绑定。运行期多态是指在运行期确定调用的函数,也称为动态绑定。
编译期多态使用宏、重载、模板实现,运行期多态使用虚函数、虚空指针(void*)实现。
void*指针可以称为多态,也可以不视作多态。

虚函数实现原理?
定义虚函数的基类及其派生类各自都有一个虚表,而类对象都有一个虚指针,指向与类对应的虚表。当然,先构造基类,再构造派生类,先析构派生类,再析构基类。在构造基类和析构基类之时,派生类成员变量处于未定义状态,虚指针指向基类的虚表,在构造函数和析构函数调用虚函数,结果调用的是基类的虚函数,并不是派生类的虚函数。
纯虚函数和虚函数的区别,什么时候使用纯虚函数?
纯虚函数不一定有定义,而虚函数必有定义。
纯虚函数声明如下:
virtual type function() = 0;
虚函数声明如下:
virtual type function();
在定义并不能够实例化的抽象类之时使用纯虚函数,抽象类是为抽象和设计而建立的特殊类,存在于类继承树结构的上层。

重载、重写、重定义
重载(overload):在同一作用域之内,函数名称相同,参数的类型、数量或者顺序任一不同。
重写(override):派生类定义的函数与基类作用域的虚函数具有相同名称和相同参数列表。
重定义:派生类重定义与基类相同名称的函数,重定义包括覆盖和隐藏。

覆盖与隐藏的区别(重定义的两种情况)
作用域名称可视性
派生类定义的函数与基类作用域的函数具有相同名称和相同参数列表(包括虚函数),基类相同签名的函数被覆盖
派生类定义的函数与基类作用域的函数具有相同名称和不同参数列表(包括虚函数),基类相同名称的函数被隐藏

有感而发

看似简单的问题,其实我还是需要深入了解不能停留在表层,加油吧

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值