📜  常见的C++面试问题|套装2

📅  最后修改于: 2021-05-30 19:25:36             🧑  作者: Mango

问: Java和C++之间的主要区别

有很多差异,其中一些主要差异是:

  • Java具有自动垃圾回收,而C++具有析构函数,这些析构函数在对象被销毁时会自动调用。
  • Java不支持指针,模板,联合,运算符重载,结构等。
  • C++没有对线程的内置支持,而在Java,您继承了Thread类以创建新线程
  • Java没有goto
  • C++支持方法重载和运算符重载,但是Java仅具有方法重载。
  • C++仅支持使用类的多重继承,而Java不支持使用类的多重继承。我们需要接口来实现Java的多重继承。
  • Java是经过解释的,因此与平台无关,而C++不是。在编译时, Java源代码将转换为JVM字节码。解释器在运行时执行此字节码并给出输出。 C++使用编译器运行和编译,该编译器将源代码转换为机器级语言。

问:什么是C++访问说明符?

访问说明符用于定义如何在类外部访问成员(函数和变量)。

  • 私有:声明为私有的成员只能在同一类中访问,而不能在声明的类之外访问。子类也不允许访问父级的私有成员。
  • 公开:可以从任何地方访问声明为公开的成员。
  • 受保护的:只有该类及其子类可以访问受保护的成员。 表5.6

您知道在C++中对派生类方法进行更严格的访问时会发生什么情况?

 问:主要的C++功能

类:类是数据,函数或方法的蓝图。类不占用任何空间。

  • 对象:对象是面向对象系统中的基本运行时实体,对象是类的实例,它们是用户定义的数据类型。
  • 封装和数据抽象:将数据和功能包装(组合)为单个单元称为封装。外部世界无法访问数据,只有包装在类中的那些函数才能访问数据。防止程序直接访问的这种数据隔离称为数据隐藏或信息隐藏。
  • 数据抽象–仅向外界提供所需的信息,并隐藏实现细节。例如,将具有公共功能的类Complex视为getReal()和getImag()。我们可以将类实现为大小为2的数组或两个变量。抽象的优点是,我们可以随时更改实现,由于我们的方法接口保持不变,因此不会影响Complex类的用户。如果我们的实施是公开的,我们将无法对其进行更改。
  • 继承:继承是一个类的对象获取另一类的对象的属性的过程。它支持层次分类的概念。继承提供了可重用性。这意味着我们可以将其他功能添加到现有类中,而无需对其进行修改。
  • 多态性:多态性是指采取多种形式的能力。一个操作在不同情况下可能表现出不同的行为。行为取决于操作中使用的数据类型。
  • 动态绑定:在动态绑定中,响应函数调用而执行的代码在运行时确定。 C++具有支持此功能的虚函数。
  • 消息传递:对象之间通过相互发送和接收信息来相互通信。对象的消息是对过程执行的请求,因此将在接收对象中调用生成所需结果的函数。消息传递涉及指定对象的名称,函数的名称以及要发送的信息。

问: C++中的结构与类

  • 在C++中,结构与类相同,不同之处在于:
    • 默认情况下,类的成员是私有的,而struct的成员是公共的。
    • 从类/结构派生结构时,基类/结构的默认访问说明符是公共的。当派生一个类时,默认的访问说明符是私有的。

问: Malloc()与新增功能/删除与免费

 以下是malloc()和new运算符之间的区别。

  • new是一个运算符,而malloc()是一个函数。
  • new返回确切的数据类型,而malloc()返回void *。
  • 新的调用构造函数(类实例自动初始化和取消初始化),而malloc()则不(类不会自动初始化或取消初始化)
  • 句法:
    1. int * n =新的int(10); //使用new()初始化
    2. str =(字符*)malloc(15); // malloc()

free()用于malloc()或C语言中的calloc()分配的资源

Delete用于C++中new分配的资源

Q.内联函数

C++提供了一个内联函数,以减少函数调用的开销。内联函数是在调用时在行中扩展的函数。当内联函数被称为内联函数的整体的代码被插入或内联函数调用的点取代。此替换由C++编译器在编译时执行。如果内联函数很小,则可以提高效率。

定义函数内联的语法为:

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

{

//函数码

}

请记住,内联只是对编译器的请求,而不是命令。编译器可以忽略内联请求。

 问: C++中的Friend类和函数

朋友类别可以访问被声明为朋友的其他类别的私有和受保护成员。有时允许特定的类访问其他类的私有成员很有用。例如,可以允许LinkedList类访问Node的私有成员。

朋友函数像朋友类一样,可以对朋友函数给予特殊的授予,以访问私有成员和受保护成员。朋友函数可以是:

a)另一类的方法

b)全局函数

有关朋友功能和类的要点:

1)朋友只能用于有限的目的。太多的函数或外部类被声明为具有受保护或私有数据的类的朋友,这降低了在面向对象编程中封装单独类的价值。

2)友谊不是相互的。如果A类是B的朋友,那么B不会自动成为A的朋友。

3)友谊不是继承的(有关更多详细信息,请参见此内容)

4)朋友的概念在Java不存在。

问:函数重载运算符重载

函数重载是C++中的一项功能,其中两个或多个函数可以具有相同的名称,但参数类型不同且参数数量不同。

注意:不允许重载具有不同返回类型的函数。

操作重载使我们可以使运算符适用于用户定义的类。例如,我们可以在类似String的类中重载运算符’+’,以便仅使用+就可以连接两个字符串。

算术运算运算符可能会重载的其他示例类是复数,小数,大整数等。

问:复制构造函数

复制构造函数是一个成员函数,它使用同一类的另一个对象初始化一个对象。复制构造函数具有以下常规函数原型:ClassName(const ClassName&old_obj);

点(int x1,int y1){x = x1; y = y1; }

//复制构造函数

Point(const Point&p2){x = p2.x; y = p2.y; }

复制构造函数何时调用?

在C++中,在以下情况下可以调用复制构造函数:

  1. 当该类的对象按值返回时。
  2. 当类的对象通过值作为参数传递(传递给函数)时。
  3. 当基于同一类的另一个对象构造一个对象时。
  4. 编译器生成临时对象时。

我们可以将复制构造函数设为私有吗?

是的,可以将复制构造函数设为私有

 问:什么是继承?

不同种类的对象通常彼此之间有一定数量的共同点。但是,每一个都还定义了使其与众不同的其他功能。面向对象的编程允许类从其他类继承常用的状态和行为

问:什么是静态成员?

静态是C++中的关键字,用于为元素赋予特殊的特性。静态元素在程序生存期内仅在静态存储区域中分配一次存储。而且它们的作用范围一直到程序生存期。静态关键字可以与以下内容一起使用,

有关C++中静态成员函数的有趣事实

  • 静态成员函数没有此指针。
  • 静态成员函数不能是虚拟的
  • 如果其中任何一个静态成员函数声明具有相同的名称和名称参数类型列表成员函数声明不能超载。
  • 不能将static成员函数声明为const,volatile或const volatile。

单击此处以阅读C++的更多有趣事实。

单击此处练习基于“输出什么”的问题?

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”