ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++基础知识 八股文

2021-10-16 20:01:29  阅读:210  来源: 互联网

标签:八股文 函数 子类 多态 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有