9-5:C++多态之多态和继承的经典题目以及面试中常考内容
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了9-5:C++多态之多态和继承的经典题目以及面试中常考内容相关的知识,希望对你有一定的参考价值。
一:多态常见经典题目总结
1:注意这种题很坑,构成多态的条件
2:此题较综合
3:
4:好题
二:多态和继承常见面试题总结
1:什么是多态
所谓多态,就是指完成某个行为时,不同对象有有不同的完成方法。在C++中,利用多态,可以达到传入哪个对象调用哪个对象的接口的目的
2:什么是重载、重写(覆盖)、重定义(隐藏)?
3:inline函数可以是虚函数吗
不可以。内联函数在预处理阶段就会被展开,而实现多态的最重要的一步就是虚函数的指针,但内敛函数没有地址
4:多态的实现原理?
每个对象第一个位置处存放的是一个虚函数表指针,其指向了一个虚函数表,虚函数表存储的就是虚函数的指针。当父类和子类构成多态时,父子类存储的虚表指针是不一样的,在程序运行阶段,传入哪个对象就会通过哪个对象的虚函数表指针,找到对应的虚函数表,然后调用对应的虚函数
5:构造函数可以是虚函数吗
不可以。因为虚函数表指针是在构造函数初始化阶段初始化的。如果将构造函数定位为了虚函数,那么就意味着构造函数的地址也被加入了虚函数表,这样调用的话就会产生矛盾
6:多态为什么要是派生类对基类的虚函数重写?为什么一定是基类的对象指针或引用调用虚函数?
1:因为只有子类重写了父类的虚函数,才能在子类和父类的虚函数表中存在两个不同的虚函数,从而实现不同调用
2:如果直接使用父类对象的调用,那么在编译阶段就已经确定了要调用父类的函数,就更别提多态了
7:对象访问普通函数快还是虚函数更快:
不构成多态的时候,在编译时就确定了如何调用,因此是一样快的
构成多态时,访问普通函数快,因为访问虚函数首先需要去对象之中找到指针,然后通过指针找到虚表之中去寻找函数地址
8:析构函数可以是虚函数吗?
尽量将析构函数定义为析构函数,这样的话这个类被继承后,子类在析构时,总能调用到父类
9:虚函数表是在什么阶段生成的,存在哪的
虚函数表是在编译阶段就生成的,一般情况下存在代码段(常量区)的
以上是关于9-5:C++多态之多态和继承的经典题目以及面试中常考内容的主要内容,如果未能解决你的问题,请参考以下文章