title: C++ 中的构造函数date: 2021-04-24 09:56:35.289

updated: 2021-04-24 10:00:27.561
url: /?p=112
categories: C++
tags: C++

构造函数的本意是在创建对象的时候初始化对象,编译器会根据传递的实参来匹配不同的(重载的)构造函数。

-
默认构造函数。就是编译器自动生成的构造函数。以 Complex 类为例,它的原型为:

1
Complex();  //没有参数

-
普通构造函数。就是用户自定义的构造函数。以 Complex 类为例,它的原型为:

1
Complex(double real, double imag);  //两个参数

-
拷贝构造函数。在以拷贝的方式初始化对象时调用。以 Complex 类为例,它的原型为:

1
Complex(const Complex &c);

-
转换构造函数。将其它类型转换为当前类类型时调用。以 Complex 为例,它的原型为:

1
Complex(double real);

不管哪一种构造函数,都能够用来初始化对象,这是构造函数的本意。假设 Complex 类定义了以上所有的构造函数,那么下面创建对象的方式都是正确的:

1
2
3
4
Complex c1();  //调用Complex()
Complex c2(10, 20); //调用Complex(double real, double imag)
Complex c3(c2); //调用Complex(const Complex &c)
Complex c4(25.7); //调用Complex(double real)

这些代码都体现了构造函数的本意——在创建对象时初始化对象。

除了在创建对象时初始化对象,其他情况下也会调用构造函数,例如,以拷贝的的方式初始化对象时会调用拷贝构造函数,将其它类型转换为当前类类型时会调用转换构造函数。这些在其他情况下调用的构造函数,就成了特殊的构造函数了。特殊的构造函数并不一定能体现出构造函数的本意。