C++面试经验

Posted 程序猿研究所V3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++面试经验相关的知识,希望对你有一定的参考价值。


/ 这是我个人的面试经验 /

C++面试经验

【Date:2021.05.13】


MYLIFE


LIFERECORD

C++的三大特性?多态?


三大特性:封装、继承、多态


多态:在基类的函数前加上关键字Virtral,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是基类,就调用基类的函数,如果对象类型是派生类,就调用派生类的函数。


所谓多态就是某一种事务有不同具体的表现,具有很多种形式


原理?虚函数


如何实现多态?

派生类继承基类时,会继承虚函数表中的元素,自己也会有一个虚函数表


多态好处?

提高了程序的扩展性。继承的基类或者接口一般是是类库中的东西,如果要修改某个方法的具体实现方式,只需要通过派生类去覆写要改变的某一个方法

弊端?

当基类引用指向子类对象的时候,虽然提高了扩展性,但是只能方位父类中具备的方法,不能访问子类中特有的方法(前期不能使用后期产生的功能,访问的局限性,但是可以通过动态转换dynamic_cast将父类准换成子类)





C++面试经验
C++面试经验
C++面试经验
C++面试经验



(向左滑动查看更多照片)



LIFERECORD

四种强制类型转换


Const_cast

Static_cast

Dynamic_cast

Reinterpret_cast


C语言版本的强制转换是通过

TypeName b = (TypeName) a 来强制转换


C++版本

  1. const_cast

    主要用于修改类型const/volatile属性,除了const或者volatile属性以外,目标类型必须与原类型相同,这种类型的转换主要用于操作所传对象的const属性,可以加上也可以去掉

  2. static_cast

    用于自然的、低风险的基本数据类型的类型转换,不能直接准化指针,可以用万能指针(void*)作为过渡进行转化

  3. dynamic_cast

    常用于子类和父类之间的类型转换,有返回值,可以惊醒安全检查

  4. reinterpret_cast

    指针类型之间的转化

C++面试经验
C++面试经验



LIFERECORD

define、const、inline区别


  1. define

    一个简单的字符替换,在程序进入编译器之前,就会被预处理程序处理掉

  2. const

    是C++中的一个关键字,用来指定一种语义的约束,即,别const修饰的对象,不可修改,变为只读,

  3. inline

    用于声明内联函数,对于内联函数,编译器会用别的函数体代码代替内联函数的调用语句,内联函数是建议性的,是否采用内联形式与具体的编译器有关

总的来说,define与const定义常量,实际中建议使用const.inline用于函数,但是只是建议性的,是否使用与具体的编译器有关

C++面试经验
C++面试经验
C++面试经验
C++面试经验


LIFERECORD

static关键字


static函数与普通函数:

作用域不同,static函数的作用域仅仅在本文件使用。如果要在外部文件中使用static函数,则需要声明extern xxx函数,则会调用这个静态函数,静态全局变量同理


静态局部变量:

静态局部变量在程序执行到该变量的声明处时候,会被首次初始化,以后函数调用不再进行函数初始化。静态变量一般在声明处被初始化,如果没有被初始化,会被程序自动初始化为0,静态局部变量也会一直存在全局数据区,知道程序运行结束,尽管他的作用域范围只是在程序体内(花括号中)


静态全局变量:

内存分配在全局数据区,未初始化的静态全局变量会初始化为0且只会初始化一次;静态全局变量只能在文件内访问,不能在文件外访问,在其他文件夹中定义相同的变量名,不会发生冲突


由此分析,把局部变量改变成静态变量以后改变了存储方式,改变了生存期,吧全局变量改为静态全局变量之后改变了他的作用域,限制了使用范围

C++面试经验
C++面试经验
C++面试经验
C++面试经验



LIFERECORD

设计模式(单例模式)


单例模式:

确保一个类,只有一个实例,而且自行实例化并向整个系统提供这个实例。构造方法一定不是public公开的,用private最好,而且拥有一个当前类的静态成员函数。再提供一个静态的方法,向外界提供当前类的实例。

饿汉式:

唯一实例,在类进行加载时候立刻进行实例化

懒汉式:

在类加载时候不进行实例化,在第一次使用时候进行实例化。若多线程同时使用,线程不安全

尝试使用双检查锁

C++面试经验
C++面试经验




以上是关于C++面试经验的主要内容,如果未能解决你的问题,请参考以下文章

2020年腾讯C++面试题和答案持续更新中(10)

2020年腾讯C++面试题和答案持续更新中(10)

前端开发面试经验

java两年经验面试都会问啥问题

LinuxC++后台开发面试

.net 面试经验谈