C++ - 参数化构造函数
在 C++ 中,构造函数是特殊的成员函数,在创建对象时会自动调用。构造函数主要有两种类型:默认构造函数和参数化构造函数。
默认构造函数是指不接受任何参数或所有参数都具有默认值的构造函数。
而参数化构造函数是指接受一个或多个参数,并在创建对象时使用特定值初始化对象的构造函数。
在本章中,我们将仅学习参数化构造函数。
C++ 参数化构造函数
C++ 参数化构造函数是指接受一个或多个参数或形参,并在创建对象时使用特定值初始化对象的构造函数。与不接受任何参数的默认构造函数不同,带参数构造函数可以接受一个或多个参数。
语法
以下是声明带参数构造函数的语法:
ClassName(parameters) { // Initialization code }
带参数构造函数示例
以下是 C++ 中带参数构造函数的示例:
#include <iostream> using namespace std; class MyClass { public: int a, b; // 带有两个参数的参数化构造函数 MyClass(int x, int y) { a = x; // 使用 x 的值初始化 a b = y; // 使用 y 的值初始化 b cout << "Parameterized constructor called" << endl; } // 显示"a"和"b"值的方法 void display() { cout << "a: " << a << ", b: " << b << endl; } }; int main() { MyClass obj1(10, 20); // 使用 10 和 20 调用参数化构造函数 obj1.display(); // Output: a: 10, b: 20 return 0; }
输出
Parameterized constructor called a: 10, b: 20
说明
- 首先定义名为 MyClass 的类,其中包含两个 int 类型的公共数据成员 a 和 b。
- 然后,一个带参数的构造函数 MyClass(int x, int y) 接受两个参数 (int x, int y),并使用创建对象时传入的值初始化它们 a 和 b。
- 现在,当调用 MyClass obj1(10, 20) 时,将调用带参数的构造函数。
- 并且 display() 方法将打印 a 和 b 的值。
多个带参数的构造函数(构造函数重载)
构造函数重载,即 C++ 中的多个带参数的构造函数,是一个概念,允许用户在同一个构造函数中定义多个构造函数。具有不同参数列表的类,每个构造函数都可以根据创建对象时传递的参数以不同的方式初始化对象。
要点
- 相同的构造函数名称 − 所有重载的构造函数必须与类同名。
- 不同的参数 − 构造函数必须具有不同数量或类型的参数。
- 灵活性 − 构造函数重载还允许以多种方式实例化同一个类,从而在对象初始化期间提供灵活性。
语法
以下是多参数构造函数的语法:
class ClassName { public: // 默认构造函数(无参数) ClassName() { // 初始化代码 } // 带一个参数的参数化构造函数 ClassName(Type1 param1) { // 使用 param1 的初始化代码 } // 带两个参数的参数化构造函数 ClassName(Type1 param1, Type2 param2) { // 使用 param1 和 param2 的初始化代码 } // 带三个参数的参数化构造函数 ClassName(Type1 param1, Type2 param2, Type3 param3) { // 使用 param1、param2 和 param3 的初始化代码 } };
带默认参数的参数化构造函数
带默认参数的参数化构造函数是一种允许用户为一个或多个参数提供默认值的构造函数,这意味着您可以在创建对象时传递值,也可以让构造函数使用缺少的参数的默认值。
语法
带默认参数的参数化构造函数的语法如下:
class ClassName { public: // 具有默认参数的构造函数 ClassName(type1 param1 = default_value1, type2 param2 = default_value2, ...) { // 构造函数实现 } };
使用参数化构造函数的优势
参数化构造函数具有多种优势,使对象初始化更加灵活、简洁和高效。下面我们讨论了一些主要优势。
- 它允许使用简化的代码灵活地初始化对象,从而提高可读性和可维护性。
- 它阻止使用无效数据创建对象,只允许使用有效数据。
- 它减少了对 setter 函数的需求,并支持构造函数重载。
- 它还提供更好的内存管理(通过动态内存分配),强制使用缺少参数的默认值,并整体提升代码性能。