编程语言
首页 > 编程语言> > C++基础知识 八股文

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