跳到主要内容

C++ 构造函数

提示
  1. 构造函数的定义和特点:构造函数是类的特殊成员函数,它在对象创建时自动调用。它与类同名、没有返回类型,并且通常为public。例如,Wall()函数是Wall类的构造函数。
  2. C++默认构造函数:没有参数的构造函数称为默认构造函数。如果类中没有定义构造函数,C++编译器会自动创建一个空的默认构造函数。
  3. C++参数化构造函数和拷贝构造函数:带参数的构造函数称为参数化构造函数,用于初始化成员变量。拷贝构造函数用于复制一个对象的数据到另一个对象。它接受一个同类型对象的引用作为参数,并将这个对象的成员数据复制到新对象中。

构造函数是一种特殊类型的成员函数,当创建对象时会自动调用。

在C++中,构造函数的名称与类名相同,它没有返回类型。例如,

class Wall {
public:
// 创建一个构造函数
Wall() {
// 代码
}
};

这里,函数 Wall() 是类 Wall 的构造函数。注意构造函数

  • 名称与类名相同,
  • 没有返回类型,
  • public

C++ 默认构造函数

没有参数的构造函数被称为 默认构造函数。在上面的例子中,Wall() 是一个默认构造函数。

示例 1:C++ 默认构造函数

// C++ 程序演示默认构造函数的使用

#include <iostream>
using namespace std;

// 声明一个类
class Wall {
private:
double length;

public:
// 默认构造函数初始化变量
Wall() {
length = 5.5;
cout << "创建一堵墙。" << endl;
cout << "长度 = " << length << endl;
}
};

int main() {
Wall wall1;
return 0;
}

输出

创建一堵墙
长度 = 5.5

这里,当 wall1 对象被创建时,Wall() 构造函数被调用。这将对象的 length 变量设置为 5.5

注意: 如果我们没有在类中定义构造函数,C++ 编译器将自动创建一个带有空代码且没有参数的默认构造函数。

C++ 带参数的构造函数

在C++中,带参数的构造函数被称为带参数的构造函数。这是初始化成员数据的首选方法。

示例 2:C++ 带参数的构造函数

// C++ 程序计算墙的面积

#include <iostream>
using namespace std;

// 声明一个类
class Wall {
private:
double length;
double height;

public:
// 带参数的构造函数初始化变量
Wall(double len, double hgt) {
length = len;
height = hgt;
}

double calculateArea() {
return length * height;
}
};

int main() {
// 创建对象并初始化数据成员
Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);

cout << "墙 1 的面积: " << wall1.calculateArea() << endl;
cout << "墙 2 的面积: " << wall2.calculateArea();

return 0;
}

输出

1 的面积: 90.3
2 的面积: 53.55

这里,我们创建了一个带参数的构造函数 Wall(),它有两个参数:double lendouble hgt。这些参数中包含的值用于初始化成员变量 length 和 height。

当我们创建 Wall 类的对象时,我们将成员变量的值作为参数传递。代码如下:

Wall wall1(10.5, 8.6);
Wall wall2(8.5, 6.3);

有了这样初始化的成员变量,我们现在可以使用 calculateArea() 函数计算墙的面积。

C++ 拷贝构造函数

C++ 中的拷贝构造函数用于将一个对象的数据复制到另一个对象。

示例 3:C++ 拷贝构造函数

#include <iostream>
using namespace std;

// 声明一个类
class Wall {
private:
double length;
double height;

public:

// 使用带参数的构造函数初始化变量
Wall(double len, double hgt) {
length = len;
height = hgt;
}

// 带 Wall 对象为参数的拷贝构造函数
// 复制 obj 参数的数据
Wall(Wall &obj) {
length = obj.length;
height = obj.height;
}

double calculateArea() {
return length * height;
}
};

int main() {
// 创建 Wall 类的一个对象
Wall wall1(10.5, 8.6);

// 将 wall1 的内容复制到 wall2
Wall wall2 = wall1;

// 打印 wall1 和 wall2 的面积
cout << "墙 1 的面积: " << wall1.calculateArea() << endl;
cout << "墙 2 的面积: " << wall2.calculateArea();

return 0;
}

输出

1 的面积: 90.3
2 的面积: 90.3

在这个程序中,我们使用了拷贝构造函数将 Wall 类的一个对象的内容复制到另一个对象。拷贝构造函数的代码为:

Wall(Wall &obj) {
length = obj.length;
height = obj.height;
}

请注意,这个构造函数的参数是 Wall 类对象的地址。

然后,我们将 obj 对象的变量值赋给调用拷贝构造函数的对象的相应变量。这就是对象内容被复制的方式。

main() 中,我们接着创建两个对象 wall1 和 wall2,然后将 wall1 的内容复制到 wall2:

// 将 wall1 的内容复制到 wall2
Wall wall2 = wall1;

这里,wall2 对象通过将 wall1 对象的地址作为其参数(即 &obj = &wall1)来调用其拷贝构造函数。

注意:构造函数主要用于初始化对象。它们还用于在创建对象时运行默认代码。