21 个最常阅读的 C++ 面试问题和答案 [针对新生]

已发表: 2020-12-17

即使在今天,C++ 仍然像 80 年代一样流行。 这种通用、编译和多范式(面向对象、过程和功能)的编程语言在 IT 行业,特别是在软件开发中起着至关重要的作用。

世界各地的开发人员使用 C++ 来构建系统软件、数据库软件、嵌入式软件、企业应用程序、基于 GUI 的应用程序、编译器、高级计算和图形、操作系统、浏览器、游戏、云系统等。自然,C++ 仍然是高度相关的编程语言。

在这篇文章中,我们创建了一个包含 21 个 C++ 面试问题的列表,如果你渴望在软件开发领域建立职业生涯,你应该知道这些问题。 这些 C++ 面试问题和答案将帮助你打破这个主题的僵局!

C++ 面试问答

  1. 定义“类”和“对象”。

在 C++ 中,类是反映不同实体、动作和特性的用户定义数据类型。 一个类包含数据成员及其功能。 对这些数据成员和函数的访问由三个修饰符定义——private、public 和 protected。 虽然类定义了数据类型,但它们仅指定数据结构而不是定义数据。

对象是类的一个实例。 它是一个运行时实体,可以代表人、地点或事物。

对象对数据成员和成员函数进行操作。 它包含字段、方法和构造函数。 例如,虽然汽车是一个物体,但它的各种特征,如车轮、设计、颜色、支架等,都是其类的实例。

  1. 什么是“访问说明符”?

访问说明符确定如何在类范围之外访问类的成员(函数和变量)。 C++ 具有三种类型的访问说明符

  • Private——私有说明符意味着类成员只能在声明它们的同一个类中访问。 在这种情况下,子类不能访问父类的私有成员。
  • 受保护的——受保护的说明符允许子类访问父类的受保护数据成员。
  • Public – 声明为“public”的类成员可以在整个 C++ 代码中访问。
  1. 什么是可变存储类说明符?

可变存储类说明符仅适用于类的非静态和非常量成员变量,用于通过声明来更改常量类对象的成员。

  1. 什么是封装?

封装是指在一个类中包装或绑定数据成员及其函数。 此过程是出于安全原因完成的,因为它限制了来自任何外部方法的访问。 如果数据成员是私有的,则只有其成员函数才能访问数据。

  1. 什么是抽象?

抽象是隐藏内部实现并仅显示基本细节的过程。 对数据成员和函数的访问取决于所使用的修饰符。 因此,如果使用 public 关键字来定义成员,则任何人都可以访问它们。 但是,如果 private 关键字定义了成员,则无法通过外部方法访问它们。

  1. 什么是命名空间?

命名空间有助于代码的逻辑划分。 它在 C++ 程序中用于通过为标识符分配不同的命名空间来防止/解决标识符的命名冲突。 命名空间定义了声明标识符(变量、类和函数)的范围。 因此,使用命名空间的主要目的是消除代码中的歧义。

  1. 定义“多态性”。 C++中有多少种多态性?

从字面上看,多态性意味着存在多种形式。 在 C++ 中,当多个函数以相同的名称存在但具有不同的功能时,就会发生多态性。

多态性有两种类型:

  • 动态多态性,又名 C++ 中的“覆盖”,可帮助您确定必须在运行时而不是编译时执行的函数方法。 函数重载是动态多态性的一个很好的例子。 在函数覆盖中,子类包含父类中已经存在的方法。 因此,子类覆盖了父类的方法。 在这种情况下,父类和子类都拥有具有不同定义的相同函数。
  • 静态多态是在代码编译时实现的(因此也称为编译时多态)。 方法重载是静态多态性的完美例子。 方法重载允许存在多个具有相同名称但具有不同功能的函数。
  1. 解释“Volatile”关键字的用途。

“volatile”函数用于声明特定变量是 volatile。 这指示编译器在外部更改变量,从而避免编译器对变量引用进行优化。

阅读: Java 面试问答

  1. 什么是内联函数?

任何在函数定义前以“inline”关键字作为前缀的函数都是内联函数。 它们主要用于减少函数调用开销。 当调用内联函数时,整个代码将被插入或替换在内联函数调用的特定点。 由于编译器将内联函数视为宏,因此它们的执行速度要快得多。 因此,声明小的内联函数有助于提高代码的效率。

内联函数的标准语法是:

内联返回类型函数名称(参数)

{

// 函数代码放在这里

}

  1. 什么是“this”指针?

在 C++ 中,“this”指针是一个常量指针,包含当前对象的内存地址。 它作为隐藏参数传递给所有非静态成员函数调用。 此外,该指针在所有非静态函数的主体中都存在一个局部变量。

阅读:SQL 面试问答

  1. C++ 是否有字符串原始数据类型?

C++ 不能具有字符串原始数据类型,而是具有来自标准模板库 (STL) 的类。

  1. 作用域解析算子的作用是什么?

范围解析运算符有两个目的:

  • 它有助于解决全局变量的范围。
  • 当一个函数在类之外定义时,作用域解析运算符将该函数与该类相关联。
  1. 什么是析构函数?

类的成员函数称为析构函数。 它的名称与类名相同,但以波浪号 (~) 作为前缀。 每当一个对象失去其作用域时,析构函数就会自动执行。

  1. 解释关键字类和关键字结构之间的区别。

关键字 class 默认代表私有成员,而关键字 struct 默认类似于公共成员。

  1. 定义一个纯虚函数。

纯虚函数是不包含任何定义的函数。 只需要通过在声明中赋值0来声明纯虚函数。 C++ 中的抽象类至少有一个纯虚函数。

纯虚函数的标准语法是:

虚空 abc()=0; //纯虚函数。

查看: 15个面试技巧,让你在求职面试中脱颖而出

  1. 类模板的目的是什么?

类模板用于创建一系列类和函数。 例如,您可以创建一个数组类的模板,该模板将允许您创建一个包含各种类型(int、float 等)的数组。 您还可以为函数创建模板。 因此,如果有 add() 函数,您可以创建多个版本的 add()。

  1. “溢出错误”是什么意思?

溢出错误是当数学计算的输出大于系统分配的实际空间时发生的算术错误。

  1. delete 和 delete[ ] 有何不同?

delete 函数释放使用“new”运算符分配的单个内存单元,而 delete[ ] 释放由 new[ ] 运算符分配的已分配内存数组。

  1. C++ 中 vTable 和 vptr 的用途是什么? 编译器如何处理它们?

在 C++ 中,vTable 包含函数指针。 另一方面,vptr 是分配给 vTable 的指针。 虽然每个类都有一个 vTable,但每个对象都有一个 vptr。 C++ 编译器在两个地方添加了额外的代码来有效地使用和维护 vTable 和 vptr:

在每个构造函数中设置正在创建的对象的 vptr 并指向一个类的 vTable。

在具有多态函数调用的代码中。 编译器在声明多态调用的每个位置插入代码,以使用基类指针/引用搜索 vptr。 一旦获得vptr,就可以访问派生类的vTable。 您可以使用 vTable 访问和调用派生类函数 show()。

  1. 在 C++ 中,自动变量存储在哪里?

默认情况下,所有局部变量都是自动变量,并存储在堆栈内存中。

  1. 如何从 DLL 中导出函数?

从 DLL 导出函数有两种方法:

  • 您可以使用 DLL 的类型库。
  • 您可以从 DLL 实例中引用该函数。

报名参加世界顶尖大学的软件工程课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

结论

这些 C++ 问题和答案是求职面试中最常见的一些问题。 尽管我们只列出了几个问题,但这应该让您对如何准备 C++ 面试有一个大致的了解。

如果您有兴趣了解有关全栈软件开发的更多信息,请查看 upGrad 和 IIIT-B 的全栈软件开发执行 PG 计划,该计划专为工作专业人士设计,提供 500 多个小时的严格培训、9 个以上的项目和任务、IIIT-B 校友身份、实用的实践顶点项目和顶级公司的工作协助。

成为全栈开发人员

立即申请软件工程硕士