C++ 构造函数

2025 年 8 月 29 日 | 阅读 9 分钟

在 C++ 中,构造函数是一种特殊的方法,在对象创建时自动调用。它通常用于初始化新对象的数据成员。在 C++ 中,构造函数的名称与 或结构体的名称相同。

类内构造函数的语法

它具有以下语法:

类外构造函数的语法

简单的 C++ 构造函数示例

让我们用一个例子来说明 C++ 中的类内构造函数。

示例

编译并运行

输出

Brand: Toyota
Model: Fortuner
Year: 2020

说明

在这个例子中,我们创建了一个名为 Car 的类。构造函数使用默认值初始化成员变量 brand、model 和 year。当在 main() 函数中创建 my_car 对象时,构造函数会自动调用,设置这些默认值。之后,cout 语句显示初始化后的值。

C++ 构造函数的类型

在 C++ 中,构造函数可以分为四类

Constructor in C++
  1. 默认构造函数
  2. 参数化构造函数
  3. 复制构造函数
  4. 移动构造函数

在这里,我们将逐一讨论这些构造函数。

C++ 默认构造函数

不带参数的构造函数称为默认构造函数。它在创建对象时被调用。它允许我们将类成员变量初始化为其默认值。它也称为零参数构造函数。

语法

它具有以下语法:

C++ 默认构造函数示例

让我们用一个简单的例子来说明 C++ 中的默认构造函数。

示例

编译并运行

输出

Default Constructor Invoked
Default Constructor Invoked

说明

在这个例子中,我们创建了一个名为 Employee 的类。每次创建类的对象时,都会自动调用构造函数。在 main() 函数中,创建了两个对象(e1 和 e2),这导致构造函数被调用两次。最后,打印两次“Default Constructor Invoked”的消息。

C++ 参数化构造函数

在 C++ 中,带有参数的构造函数称为参数化构造函数。它用于为不同对象提供不同的值。它有助于初始化成员数据。当我们想要定义构造函数体时,我们可以使用参数来初始化对象。

语法

它具有以下语法:

C++ 参数化构造函数示例

让我们用一个例子来说明 C++ 中的参数化构造函数。

示例

编译并运行

输出

201  John  650000
202  Alice  750000

说明

在这个例子中,我们创建了一个名为 Employee 的类,其中包含 ID、name 和 salary 等多个成员变量。在 main() 函数中,我们分配了对象的值。之后,我们创建了 Employee 类的 emp1 和 emp2 对象,它们显示了输出。

复制构造函数

一种称为复制构造函数的成员函数,它有助于使用同一类中的另一个对象来初始化一个项。复制构造函数需要同一类对象的引用。

阅读更多:复制构造函数

语法

它具有以下语法:

C++ 复制构造函数示例

让我们用一个例子来说明 C++ 中的复制构造函数。

示例

编译并运行

输出

Length: 10
Length: 10

说明

在这个例子中,“Box”类有一个接受 box “length”参数的构造函数。之后,复制构造函数通过复制“length”的值来从现有对象创建一个新的“Box”对象。在 main() 函数中,我们使用复制构造函数复制一个“Box”对象,两个对象都显示它们的“length”。

移动构造函数

在 C++ 中,移动构造函数是一种特殊的构造函数,它允许将一个对象的一部分资源移动到另一个对象,而不是在内存中复制对象。它与右值引用一起工作,并且基于移动语义。它使我们能够在不执行深拷贝的情况下将资源的所有权从一个对象转移到另一个对象,这有助于提高程序的性能。

语法

它具有以下语法:

C++ 移动构造函数示例

让我们用一个例子来说明 C++ 中的移动构造函数。

示例

编译并运行

输出

Constructor called
Move Constructor called
Hello Tpoint Tech
Null string

说明

在这个例子中,我们创建了一个名为 Tpoint 的类,它处理一个动态分配的 C 风格字符串。该类包含一个初始化字符串的构造函数、一个用于深拷贝的复制构造函数、一个用于高效转移字符串所有权的移动构造函数以及一个用于释放分配内存的析构函数。

在 main() 函数中,创建了一个 T1 对象,其中包含一个字符串,并且使用 std::move(T1) 函数初始化 T2,该函数调用移动构造函数。

C++ 构造函数的特点

C++ 构造函数的一些特点如下

  • 构造函数与它所属的类同名。
  • 构造函数通常在类的 public 成员部分声明。
  • 当我们创建类对象时,构造函数会立即调用。
  • 构造函数在 C++ 中不返回值,因此它们没有任何返回类型。
  • 不允许将构造函数声明为虚函数。
  • 不能在单个类中声明多个构造函数。
  • 在分配内存时,构造函数会隐式调用 new 和 delete 运算符。

带默认参数的构造函数

构造函数可以具有一些默认参数值,这基本上意味着如果未传递任何值,则将使用默认值。

C++ 带默认参数的构造函数示例

让我们用一个简单的 C++ 带默认参数的构造函数示例。

示例

编译并运行

输出

Area of Rectangle: 15
Area of Rectangle: 70

说明

在此示例中,我们创建了一个构造函数,其中 length 和 width 的默认值为 5 和 3。如果对象在没有参数的情况下创建,则使用给定的默认值。如果传递了参数,则会覆盖默认值。

构造方法重载

构造函数重载允许多个构造函数具有不同的参数。它使我们能够根据情况以各种方式创建对象。

阅读更多:构造函数重载

C++ 构造函数重载示例

让我们用一个 C++ 构造函数重载的简单示例。

示例

编译并运行

输出

Name: Unknown, Age: 0
Name: John Doe, Age: 30

说明

在此示例中,我们创建了一个名为 Person 的类,它提供了两个构造函数:一个不带参数,另一个接受 name 和 age。之后,根据情况,一个实例化可以使用一个构造函数,而另一个实例化可以使用另一个。

带初始化列表的构造函数

这种初始化成员变量的方法更快。它主要用于 const 变量或在对象创建时需要初始化的引用。

C++ 带初始化列表的构造函数示例

让我们用一个 C++ 带初始化列表的构造函数的简单示例。

示例

编译并运行

输出

Book Title: The C++ Programming Language, Year: 2025

结论

在 C++ 中,构造函数是对象初始化和资源管理的重要组成部分。它们可以确保所有对象都有有效的值,并且还可以管理资源。通过了解所有形式的构造函数(默认、参数、复制),我们可以编写更强大、更简洁的 C++ 代码。

C++ 构造函数选择题

1) C++ 中构造函数的主要目的是什么?

  1. 为对象分配内存
  2. 在对象构建期间初始化对象
  3. 定义类行为
  4. 返回对象地址
 

答案:b) 在对象构建期间初始化对象


2) 关于默认构造函数,以下哪项陈述是正确的?

  1. 默认构造函数应带有参数。
  2. 默认构造函数仅初始化静态变量。
  3. 默认构造函数不带任何参数。
  4. 默认构造函数只能显式调用。
 

答案:c) 默认构造函数不带任何参数。


3) 下列哪项最能描述编译器生成的复制构造函数的默认行为?

  1. 它执行所有成员的深拷贝。
  2. 它对对象执行按位拷贝。
  3. 它执行所有成员的浅拷贝。
  4. 它仅初始化原始类型成员。
 

答案:c) 它执行所有成员的浅拷贝。


4) 关于 C++ 中的构造函数重载,以下哪项是正确的?

  1. 构造函数不能重载
  2. 只有复制构造函数可以重载
  3. 重载的构造函数必须具有不同的返回类型
  4. 可以通过更改参数列表来重载构造函数
 

答案:d) 可以通过更改参数列表来重载构造函数


5) 关于复制构造函数,以下哪项是正确的?

  1. 它应该用 static 关键字声明
  2. 它不能接受参数
  3. 它只能在类内部定义
  4. 它应该通过引用接受其参数
 

答案:d) 它应该通过引用接受其参数