牛客高级系列专栏:

简介

本人2020年本硕毕业于广东工业大学:嵌入式许乔丹,牛客高级专栏作者,牛客大学讲师,本科阶段搞了4年单片机、曾参加全国大学生恩智浦汽车竞赛,发表4个硬件专利。研究生阶段找了嵌入式linux的实习,毕业后拿到珠海格力,云从科技,CVTE,小米,美的,华为的嵌入式offer,签约CVTE嵌入式岗位。

在CVTE先后做过嵌入式Linux开发和安卓系统开发,参与过TV板卡、显示屏板卡、智能家居板卡、希沃网课学习机的开发。欢迎交流嵌入式或者安卓哈!

正文开始⬇️

第二章 C/C++高频面试题 (本文讲2.2.10-2.2.15)

2.1 c和c++区别、概念相关面试题

2.1.1 new和malloc的区别⭐⭐⭐⭐⭐

2.1.2 malloc的底层实现⭐⭐⭐⭐

2.1.3在1G内存的计算机中能否malloc(1.2G)?为什么?⭐⭐

2.1.4指针与引用的相同和区别;如何相互转换?⭐⭐⭐⭐⭐

2.1.5 C语言检索内存情况 内存分配的方式⭐⭐⭐

2.1.6  extern”C” 的作用⭐⭐⭐

2.1.7 extern容易忽略的知识点⭐⭐⭐⭐

2.1.8函数参数压栈顺序,即关于__stdcall和__cdecl调用方式的理解⭐⭐⭐

2.1.9重写memcpy()函数需要注意哪些问题⭐⭐

2.1.10数组到底存放在哪里⭐⭐⭐

2.1.11  struct和class的区别 ⭐⭐⭐⭐⭐

2.1.12 char和int之间的转换;⭐⭐⭐

2.1.13  static的用法(定义和用途)⭐⭐⭐⭐⭐

2.1.14  cosnt的用法(定义和用途)⭐⭐⭐⭐⭐

2.1.15const常量和#define的区别(编译阶段、安全性、内存占用等) ⭐⭐⭐⭐

2.1.16  volatile作用和用法 ⭐⭐⭐⭐⭐

2.1.17有常量指针 指针常量 常量引用 没有 引用常量⭐⭐⭐

2.1.18没有指向引用的指针,因为引用是没有地址的,但是有指针的引用⭐⭐⭐

2.1.19c/c++中变量的作用域⭐⭐⭐⭐⭐

2.1.20 c++中类型转换机制?各适用什么环境?dynamic_cast转换失败时,会出现什么情况?⭐⭐⭐⭐

2.2 继承、多态相关面试题 ⭐⭐⭐⭐⭐

2.2.1继承和虚继承 ⭐⭐⭐⭐⭐

2.2.2多态的类,内存布局是怎么样的 ⭐⭐⭐⭐⭐

2.2.3被隐藏的基类函数如何调用或者子类调用父类的同名函数和父类成员变量 ⭐⭐⭐⭐⭐

2.2.4多态实现的三个条件、实现的原理 ⭐⭐⭐⭐⭐

2.2.5对拷贝构造函数 深浅拷贝 的理解 拷贝构造函数作用及用途?什么时候需要自定义拷贝构造函数?⭐⭐⭐

2.2.6析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,还有其他需考虑的因素吗?⭐⭐⭐

2.2.7什么情况下会调用拷贝构造函数(三种情况)⭐⭐⭐

2.2.8析构函数一般写成虚函数的原因⭐⭐⭐⭐⭐

2.2.9构造函数为什么一般不定义为虚函数⭐⭐⭐⭐⭐

2.2.10什么是纯虚函数⭐⭐⭐⭐⭐

2.2.11静态绑定和动态绑定的介绍⭐⭐⭐⭐

2.2.12 C++所有的构造函数 ⭐⭐⭐

2.2.13重写、重载、覆盖的区别⭐⭐⭐⭐⭐

2.2.14成员初始化列表的概念,为什么用成员初始化列表会快一些(性能优势)?⭐⭐⭐⭐

2.2.15如何避免编译器进行的隐式类型转换;(explicit)⭐⭐⭐⭐

2.2.10什么是纯虚函数

解析:纯虚函数声明:virtual函数类型 函数名(参数表列)= 0;

纯虚函数只有函数的名字而不具备函数的功能,不能被调用。纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对他进行定义。如果在基类中没有保留函数名字,则无法实现多态性。如果在一个类中声明了纯虚函数,在其派生类中没有对其函数进行定义,则该虚函数在派生类中仍然为纯虚函数。

注意:

(1)纯虚函数没有函数体;

(2)最后面的“=0”并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是虚函数”;

(3)这是一个声明语句,最后有分号。

Ps:抽象类:不用定义对象而只作为一种基本类型用作继承的类叫做抽象类(也叫接口类),凡是包含纯虚函数的类都是抽象类,抽象类的作用是作为一个类族的共同基类,为一个类族提供公共接口,抽象类不能实例化出对象。纯虚函数在派生类中重新定义以后,派生类才能实例化出对象。

2.2.11静态绑定和动态绑定的介绍

解析:

静态类型:对象在声明时采用的类型,在编译期既已确定;

动态类型:通常是指一个指针或引用目前所指对象的类型,是在运行期决定的;