C++基础知识 八股文
作者:互联网
1、面向对象的三大特性:
继承、多态、封装:将具体的实现过程封装成函数,只能通过接口进行访问
2、什么是多态?多态如何实现?
多态:父类的指针指向子类的对象,通过父类指针调用实际的子类的成员函数。
实现:通过虚函数实现,虚函数的地址保存在虚函数表中,虚函数表的地址保存在含有虚函数的类的实例对象的内存空间中。
3、虚函数:virtual修饰的成员函数
纯虚函数:加上=0;例:virtual void show(int a) = 0;
如果父类定义虚函数,子类必须重写。
含有纯虚函数的类称为派生类;继承纯虚函数的派生类如果没有完全实现基类纯虚函数,依然是抽象类,不能实例化对象。
抽象类对象不能作为函数的参数,不能创建对象,不能作为函数返回类型。
可以声明抽象类指针,可以声明抽象类的引用。
子类必须继承父类的纯虚函数,并全部实现后,才能创建子类的对象。
4、虚函数和纯虚函数的区别?
1.虚函数和纯虚函数可以出现在同一个类中,该类成为抽象基类。
2.使用方式不用:虚函数可以直接使用,纯虚函数必须在派生类中实现后才能使用。
3.定义方式不同:虚函数的定义要在普通函数的基础上加上virtual关键字,纯虚函数定义时除了要加virtual,还要加=0。
4.虚函数必须实现,否则会报错。
5.析构函数最好定义为虚函数,特别是对于含有继承关系的类;析构函数可以定义为纯虚函数,此时其所在的类为抽象基类,不能创建对象。
5、虚函数实现多态的原理?
1.函数指针
2.一个由函数指针组成的虚函数列表vtable,以及一个具体指向哪个虚函数列表的虚函数指针vfptr,该指针指向虚函数的地址
3.调用虚函数,通过vfptr找到对应的vtable,调用表里的函数指针,如果子类重写,表中的子类函数就会覆盖父类,调用的就是子类。也就是说子类继承父类的时候,可以这么理解,先把父类的虚函数列表复制一份作为自己的,然后如果子类重写父类就覆盖,没重写就保留,如果子类的函数父类没有,那就在虚函数列表加上。
4.vtable每个类一个,编译期就存在,vfptr创建对象时就存在,每个对象一个
5.构造函数会在初始化列表初始化。
6.虚函数表和类绑定,虚表指针和对象绑定。什么意思?就是类的不同对象它们的虚函数列表都是相同的,但是每个对象都有自己的虚表指针,来指向类的虚函数列表。
转载:C++ 面试突击 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)
声明:本次转载完全出于学习目的,如侵犯网站或答案原作者权益,请私信我,本人将最快速删除博客,并予以道歉。
标签:八股文,函数,子类,多态,C++,基础知识,纯虚,列表,父类 来源: https://blog.csdn.net/qq_45284454/article/details/120802560