C++面试题



亲爱的读者,这些C++面试题是专门为了让您熟悉在C++面试中可能遇到的问题类型而设计的。根据我的经验,优秀的面试官在面试过程中很少会计划提出任何特定问题,通常问题会从该主题的一些基本概念开始,然后根据进一步的讨论以及您的回答继续进行。

面向对象编程系统。

类是一种蓝图,它反映了实体的属性和操作。从技术上讲,定义类就是设计用户自定义数据类型。

类的实例称为对象。

单继承、多级继承、多重继承、层次继承和混合继承。

如果类成员是protected,则可以在继承的类中访问它。但是,在类外部,私有和受保护的成员都无法访问。

将数据和作用于数据的函数绑定在一个实体(类)中的过程称为封装。

抽象是指隐藏内部实现并仅显示必要细节。

继承是将现有类的属性获取到新类中的过程。现有类称为基类/父类,继承的类称为派生类/子类。

将变量声明为volatile会指示编译器该变量可以在外部更改。因此,避免了对变量引用的编译器优化。

在函数定义之前使用关键字inline修饰的函数称为内联函数。与普通函数相比,内联函数执行速度更快,因为编译器将内联函数视为宏。

存储类指定符号(如变量或函数)的生命周期或作用域。

以下是在C++中支持的存储类

auto、static、extern、register和mutable

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

浅拷贝逐位地将内存从一个对象复制到另一个对象。深拷贝逐字段地将对象复制到另一个对象。深拷贝是通过复制构造函数或重载赋值运算符来实现的。

没有函数体并且赋值为零的虚函数称为纯虚函数。

至少有一个纯虚函数的类称为抽象类。我们不能实例化抽象类。

引用变量是现有变量的别名。这意味着变量名和引用变量都指向相同的内存位置。因此,也可以使用引用变量来更新原始变量。

即使没有为相应的类创建对象,静态变量也存在。静态成员变量在为相应类创建的所有对象之间共享一个公共内存。可以使用类名本身来引用静态成员变量。

静态成员函数可以在类名存在之前使用类名调用。它只能访问类的静态成员。

wchar_t

点(.)和箭头(->)

否,定义类/结构体只是一个类型定义,不会为其分配内存。

bool是C++语言中引入的新原始数据类型。

定义几个具有相同名称但参数列表唯一的函数称为函数重载。

为现有运算符定义一个针对类对象的新工作称为运算符重载。

没有,它是来自STL(标准模板库)的类。

cin、cout、cerr和clog。

私有和受保护。

作用域解析运算符(::)

析构函数是类的成员函数,其名称与类名相同,并在前面加上波浪号(~)符号。一旦对象失去作用域,它就会自动针对该对象执行。它不能被重载,唯一的形式是无参数的。

构造函数是类的成员函数,其名称与类名相同,并且在为相应类创建对象时会自动执行。

如果程序员没有提供构造函数,则每个类都具有编译器提供的构造函数,称为默认构造函数。程序员提供的没有参数的构造函数称为默认构造函数。在这种情况下,编译器不会提供构造函数。

“new”是可用于此目的的运算符。

“delete”运算符用于释放使用“new”运算符创建的动态内存。

是的,因为C是C++的子集,所以我们可以在C++中使用C的所有函数。

否,我们需要为此使用C语言的free()。

不是类成员但仍然可以访问类所有成员的函数称为友元函数。为了实现这一点,我们需要在所需的类中使用关键字“friend”进行声明。

复制构造函数是将相同类对象的引用作为参数的构造函数。在创建对象时,如果用同一类的另一个对象初始化该对象,则会自动调用它。

C++确实支持异常处理。try、catch和throw是用于此目的的关键字。

this是编译器的指针变量,它始终保存当前活动对象的地址。

默认情况下,struct的成员是公有的,而默认情况下,类的成员是私有的。

是的。

作用域仅在块内适用的变量称为块作用域变量。此外,可以在C++中的块内的任何位置声明变量。

如果文件已存在,则在打开文件之前会截断其内容。

作用域解析运算符用于

  • 解析全局变量的作用域。
  • 如果函数在类外部定义,则将函数定义与类关联。

命名空间是代码的逻辑划分,可用于通过将标识符放在不同的命名空间下解决标识符的名称冲突。

从命令行/控制台执行时发送到main()函数的参数/参数称为命令行参数。发送的所有参数都仅为字符串。

模板类是一种泛型类。关键字 template 可用于定义类模板。

带有省略号的 catch 块如下所示

catch(…) 
{
}

默认情况下,函数的每个局部变量都是自动的 (auto)。在下面的函数中,变量 'i' 和 'j' 都是自动变量。

void f() 
{
   int i;
  
   auto int j;
}

注意 - 全局变量不能是自动变量。

静态局部变量在函数调用之间保留其值,默认值为 0。如果该函数被调用三次,则以下函数将打印 1 2 3。

void f() 
{ 
   static int i; 
   
   ++i; 
   printf(“%d “,i); 
}

如果全局变量是静态的,则其可见性仅限于相同的源代码。

用于解析全局符号的作用域。

#include <iostream>

using namespace std;	
main() {
   extern int i;
      
   cout<<i<<endl;
}
int i = 20;

数组的起始地址称为数组的基地址。

如果某个变量使用频率最高,则应使用 register 存储说明符声明它,然后编译器可能会为其存储分配 CPU 寄存器,以加快变量的查找速度。

是的,可以,但无法执行,因为执行需要 main() 函数定义。

每个局部变量默认情况下都是 auto 变量,存储在栈内存中。

包含至少一个其他类类型成员变量的类称为容器类。

C++ 程序由各种标记组成,标记可以是关键字、标识符、常量、字符串文字或符号。

预处理器是编译器的一条指令,指示它在实际编译过程开始之前执行某些操作。

在执行程序时传递给 main() 函数的参数称为命令行参数。这些参数始终是字符串,保存在函数的第二个参数(下面为 args)中,该参数是字符指针数组。第一个参数表示参数的数量(下面为 count),并由操作系统自动更新。

main( int count, char *args[]) {
}
  • 值传递 - 我们仅将值作为参数发送给函数。如果我们不希望实际参数被形式参数修改,而只是使用它们,则选择此方法。

  • 地址传递 - 我们发送实际参数的地址而不是值。如果我们希望实际参数被形式参数修改,则选择此方法。

  • 引用传递 - 实际参数使用 C++ 新的引用变量作为形式参数接收。如果我们希望实际参数被形式参数修改,则选择此方法。

错误,模运算符 (%) 的任何一个操作数都不能是实数,这是无效的。

使用选项 –lm,例如 > g++ –lm <file.cpp>

不可以,没有此类规定。

Bjarne Stroustrup。

sizeof

我们可以对全局变量的作用域应用作用域解析运算符 (::)。

指针上仅允许两种操作

  • 比较 ii) 加法/减法(不包括 void 指针)

函数自己调用自己称为递归。

程序名称。

理想情况下为 32 个字符,并且还取决于实现。

默认情况下,函数按值调用。

公有、私有和保护

Delete[] 用于释放使用 new[] 分配的数组分配的内存,而 delete 用于释放使用 new 分配的一块内存。

不一定,包含至少一个纯虚函数的类也是抽象类。

不可以,这将导致错误,因为编译器无法执行转换。

程序将突然退出。

不,异常可以处理,而程序无法解决错误。

在基类和派生类中定义具有相同签名和名称的函数,其中基类的函数是虚函数。

seekg()

seekp()

不,只有类成员变量决定相应类对象的大小。

我们可以创建一个空类,并且对象的大小为 1。

C++ 定义的默认命名空间。

标准模板库

cout 是 ostream 类的对象。流“cout”默认连接到控制台输出设备。

cin 是 istream 类的对象。流“cin”默认连接到控制台输入设备。

它用于指定正在使用的命名空间。

可以使用箭头 (->) 运算符。

如果头文件包含在 < > 中,则编译器仅在内置包含路径中搜索该特定头文件。如果头文件包含在 “ “ 中,则编译器首先在当前工作目录中搜索该特定头文件,如果未找到,则在内置包含路径中搜索。

S++,因为它在内部是单个机器指令 (INC)。

在调用端发送给函数的参数称为实际参数,而在函数定义的接收端称为形式参数。

声明将类型与变量关联,而定义为变量赋予值。

goto。

不,它包含无效的八进制数字。

它将用于取消定义现有的宏定义。

不可以。

虚析构函数确保对象的资源以对象构造的反序释放,相对于继承的对象。

对象以其创建的反序销毁。

通过在目标类中放置以关键字“friend”为前缀的类声明,类成员可以获得对其他类成员的访问权限。

下一步是什么?

接下来,您可以回顾一下您之前完成的与该主题相关的作业,并确保您能够自信地谈论它们。如果您是应届毕业生,面试官不会期望您能回答非常复杂的问题,而是您必须使自己的基础概念非常牢固。

其次,如果您无法回答一些问题,实际上并不重要,重要的是您回答的任何问题都必须充满信心。因此,在面试过程中要保持自信。我们在 tutorialspoint 祝您面试顺利,并祝您未来的工作一切顺利。干杯 :-)

cpp_questions_answers.htm
广告