【C++】 面试题答案 (持续更新)

简介: C++ 面试题与参考答案,仅供参考

I - 常规题

1.1 - struct 与 class 的区别

  1. 成员的默认访问权限不同,struct 为 public, class 为 private
  2. 默认的继承方式不同,未声明时 struct 为 public 继承,class 为 private 继承。
    struct 与 class 可以互相继承,默认继承方式取决于子类。
  3. struct 关键字不能够定义模板类型,示例:
     template<class T> // 正确
     template<struct T> // 错误
    

1.2 - sizeof 与 strlen 的区别

  1. 性质不同, sizeof 为操作符,strlen 为函数
  2. 计算时间不同,sizeof 为编译时计算,strlen 为运行时计算
  3. strlen 只能计算 char * 字符串长度 ,sizeof 可计算结构体等其他类型占用内存大小
  4. 等等

1.3 - delete 与 free 的区别

  1. delete 为操作符, free 为函数
  2. free 只释放动态分配的内存, delete 还会调用析构函数
  3. ...

III - 综合应用

考察内存分区,类 相关知识

3.1 - 一个未初始化的类类型的指针调用类内部的函数,在什么情况下程序会崩溃,什么情况下不会崩溃,以及为什么?

  1. 调用静态成员函数和未使用成员变量的成员函数时不会崩溃,因为程序运行时函数位于代码段,是静态的,成员变量位于堆区或者栈区,
  2. 调用其他成员函数时会崩溃
  3. 调用虚函数会崩溃,因为函数位于代码段是静态的,但虚表与虚表指针使用的是动态的内存。

总结:所有涉及到 this 指针解引用的情况都会崩溃。

目录
相关文章
|
5月前
|
存储 算法 编译器
C++面试题其一
C++文件编译与执行的四个阶段 预处理:处理#include、#define等预处理指令。 编译:将源码翻译为目标代码。 汇编:将目标代码转换为机器指令。 链接:将目标文件和库文件合并生成可执行文件。 STL中的vector的实现,是怎么扩容的? vector通过动态数组实现,当容量不足时,分配更大的内存(通常是原来的两倍),复制旧数据到新内存,并释放旧内存。
77 2
|
5月前
|
存储 程序员 编译器
C++面试题其二
extern "C" 用于告诉编译器按照C语言的链接方式处理代码,通常用于C++代码与C代码混合编程,以防止因名字修饰(name mangling)引起的链接错误。例如: extern "C" { void c_function(); } 通过这些问题的深入理解和解答,能够更好地掌握C++编程的核心概念和实际应用,为面试做好充分的准备。
70 1
|
5月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
570 14
|
6月前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
57 5
|
6月前
|
存储 编译器 C语言
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(下)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
59 1
|
6月前
|
存储 编译器 Linux
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(中)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
65 1
|
5月前
|
安全 算法 C++
C++面试题其三
继续上篇博客的解答,我们将进一步探讨C++中的一些关键概念和常见面试问题。
52 0
|
6月前
|
编译器 C语言 C++
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(上)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
46 0
|
6月前
|
编译器 程序员 C语言
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(下)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
42 0
|
6月前
|
编译器 C语言 C++
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题(中)
从C语言到C++⑨(第三章_C&C++内存管理)详解new和delete+面试题笔试题
49 0