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++多态之多态和继承的经典题目以及面试中常考内容的主要内容,如果未能解决你的问题,请参考以下文章

9-2:C++多态之纯虚函数和抽象类以及接口继承和实现继承

C++多态

C++之多态总结(多态的定义及实现,抽象类,多态原理,单继承,多继承中的虚函数表)

.NET 经典面试题

python-继承以及继承问题和多态

继承和多态的相关面试题总结