【C++】面经

目录

0.简介

1.虚函数(多态)

1.1什么是多态(静态多态和动态多态)

1.2什么是虚函数什么是纯虚函数,纯虚函数的作用

1.3虚函数的底层原理

1.4构造函数可以是虚函数或者纯虚函数吗,析构函数呢

1.5为什么析构函数要求是虚函数

1.6静态函数能是虚函数吗,模板函数能是虚函数吗

1.7虚函数表属于类还是属于对象

1.8虚函数表在什么时候生成

1.9虚表指针在什么时候生成

1.10协变

2.C++11新特性

2.1智能指针

3.区别

3.1malloc和new 的区别

3.2指针跟引用的区别

3.3值传递和引用传递的区别

3.4堆内存和栈内存的区别? 哪些变量在栈,哪些在堆

3.5 32位系统和64位系统的区别

3.6 重载 重写 隐藏的区别

3.7C++,释放内存的时候 关键字delete和free有什么区别

​编辑

4.内存

4.1 内存空间分布

4.2C++虚函数表存在哪里

4.3虚拟内存是什么

4.4内存对齐 在定义结构体时,编译器可能会有内存对齐,介绍一下为什么会有内存对齐?

4.5malloc出来的内存是在物理内存还是虚拟内存

4.6

5.STL容器

5.1vector的实现原理 vector是如何扩容的

5.2标准库里的hashtable是什么容器的底层?如何实现的?hashtable怎么做扩容?

5.3使用标准库时又是会出现迭代器失效的情况,这种情况一般是怎么回事?

5.4数组和链表的区别vector和list的使场景  新增一个元素,数组和链表的区别

5.5stack适配器的底层容器是什么,能不能用vector,为什么

5.6c++的map的底层实现  红黑树Map的底层,红黑树的查询和插入的时间复杂程度,Unordermap的底层实现是什么

6.左值引用和右值引用

7.六大默认构造函数

7.1什么时候使用拷贝构造函数

7.2什么时候使用赋值重载函数

7.3

8.C++进程包含哪些部分?

9.c++调用函数整个压栈过程是怎么样的

10.如何将函数作用域里面的局部变量返回到外部

11.什么是循环引用问题,弱指针如何解决循环引用问题

12.共享指针的底层实现

13.A星算法的过程

14.快速排序的原理,时间复杂度

15.bfs和dfs的区别,用到的数据结构 dfs压栈

16.说一下const修饰符?const实现的原理?

17.一个函数调用的过程(ESP EBP压栈这些的)new和malloc的区别?

18.解决哈希冲突的方法


0.简介

       最近看到的面经总结往往不够深入或者不够广泛,所以我针对近期的面试题总结出来的常考问题,特别是对问题深度和广度的追问和探讨,帮助大家更能完善地应对面试,同时我也会不断进行更新,如有错误请多多指正,希望大家都能拿到理想的offer!

1.虚函数(多态)

1.1什么是多态(静态多态和动态多态)

多态的构成条件

  1. 必须通过基类的指针或者引用调用虚函数
  2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写(三同)
  3. 重写:两个函数分别在基类和派生类,并且三同(函数名,参数,返回值(协变例外));

1.2什么是虚函数什么是纯虚函数,纯虚函数的作用

 语法上:

        1.虚函数和纯虚函数都只能在类中通过关键字“virtual”声明,纯虚函数形参列表后接“=0”;

        2.可以在一个类中同时声明虚函数和纯虚函数;

        3.含有纯虚函数的类(抽象类)不能创建实例对象;

        4.仅含有虚函数的类可以创建实例对象;

        4.抽象类也可以实现自己的虚函数以及纯虚函数(相当于准备一份缺省的实现);

        5.派生类必须覆写基类的纯虚函数,否则无法通过编译;

        6.派生类可以不覆写基类的虚函数,此时默认调用到基类的缺省实现;

        7.覆写了虚函数的派生类可以显示调用基类的缺省实现,否则默认调用覆写的实现;

应用上:

        1.虚函数主要是为了实现运行时的多态,案例情形:A类为抽象类,虽然不能创建实例,但可以创建A类的指针,并且A类的指针可以指向其派生类的实例对象,此时再通过这个指针去调用虚函数,则会调用到对应派生类的覆写实现。

         2.纯虚函数除了要实现运行时的多态,还为了“代码层“的多态,还强调了“接口继承”的特性,纯虚函数更多是为了预留一个接口,以便未来开发时派生类根据不同的需求实现该接口。

1.3虚函数的底层原理

实现原理:虚函数表+虚表指针

1.4构造函数可以是虚函数或者纯虚函数吗,析构函数呢

构造函数:

析构函数:

1.5为什么析构函数要求是虚函数

1.6静态函数能是虚函数吗,模板函数能是虚函数吗

  1. static成员不属于任何类对象或类实例,所以即使给此函数加上virutal也是没有任何意义的。

  2. 静态与非静态成员函数之间有一个主要的区别。那就是静态成员函数没有this指针。

  3. 类模板成员函数不可以是虚函数(因为编译器无法确定存在多少虚函数)

1.7虚函数表属于类还是属于对象

  • 类与虚表的关系:一个类只有一个虚表
  • 对象与类的关系:所有对象共享一个虚表


1.8虚函数表在什么时候生成

编译


1.9虚表指针在什么时候生成

初始化对象

1.10协变

三同的例外

基类中返回的是基类类型的指针或引用,派生类可以重写该虚函数并返回派生类类型的指针或引用

2.C++11新特性

2.1智能指针

3.区别

3.1malloc和new 的区别

3.2指针跟引用的区别

3.3值传递和引用传递的区别

3.4堆内存和栈内存的区别? 哪些变量在栈,哪些在堆

3.5 32位系统和64位系统的区别

32位和64位系统在Windows下基本数据类型的大小都是一样的。只有指针的大小不一样!32位指针大小为4byte,而64位的指针大小为8byte。
 

3.6 重载 重写 隐藏的区别

3.7C++,释放内存的时候 关键字delete和free有什么区别

4.内存

4.1 内存空间分布

4.2C++虚函数表存在哪里

只读数据段

4.3虚拟内存是什么

4.4内存对齐 在定义结构体时,编译器可能会有内存对齐,介绍一下为什么会有内存对齐?

4.5malloc出来的内存是在物理内存还是虚拟内存

虚拟内存

4.6

5.STL容器

5.1vector的实现原理 vector是如何扩容的

5.2标准库里的hashtable是什么容器的底层?如何实现的?hashtable怎么做扩容?

5.3使用标准库时又是会出现迭代器失效的情况,这种情况一般是怎么回事?

5.4数组和链表的区别vector和list的使场景  新增一个元素,数组和链表的区别

5.5stack适配器的底层容器是什么,能不能用vector,为什么

5.6c++的map的底层实现  红黑树Map的底层,红黑树的查询和插入的时间复杂程度,Unordermap的底层实现是什么

6.左值引用和右值引用

7.六大默认构造函数

7.1什么时候使用拷贝构造函数

7.2什么时候使用赋值重载函数

7.3

8.C++进程包含哪些部分?

9.c++调用函数整个压栈过程是怎么样的

10.如何将函数作用域里面的局部变量返回到外部


11.什么是循环引用问题,弱指针如何解决循环引用问题


12.共享指针的底层实现


13.A星算法的过程

14.快速排序的原理,时间复杂度

15.bfs和dfs的区别,用到的数据结构 dfs压栈

16.说一下const修饰符?const实现的原理?


17.一个函数调用的过程(ESP EBP压栈这些的)new和malloc的区别?


18.解决哈希冲突的方法

相关推荐

  1. C++

    2024-04-22 03:34:01       37 阅读
  2. c++

    2024-04-22 03:34:01       19 阅读
  3. C语言

    2024-04-22 03:34:01       10 阅读
  4. C++

    2024-04-22 03:34:01       6 阅读
  5. 虎牙C++技术

    2024-04-22 03:34:01       33 阅读
  6. Unity(自整)——C#基础

    2024-04-22 03:34:01       19 阅读
  7. C++ 每日一问(一)

    2024-04-22 03:34:01       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-22 03:34:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-22 03:34:01       20 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-22 03:34:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-22 03:34:01       20 阅读

热门阅读

  1. 基于HC32F460petb芯片给FLASH安装fat文件系统

    2024-04-22 03:34:01       18 阅读
  2. SpringCloud整合ElasticSearch搜索使用

    2024-04-22 03:34:01       16 阅读
  3. RocketMQ的设计理念和目标

    2024-04-22 03:34:01       16 阅读