- 默认构造函数。就是编译器自动生成的构造函数。
Complex(); //没有参数
- 普通构造函数。就是用户自定义的构造函数。
Complex(double real, double imag); //两个参数
- 拷贝构造函数。在以拷贝的方式初始化对象时调用。
Complex(const Complex &c);
- 转换构造函数。将其它类型转换为当前类类型时调用。
Complex(double real);
对 Complex 类的进一步精简
上面的 Complex 类中我们定义了三个构造函数,其中包括两个普通的构造函数和一个转换构造函数。其实,借助函数的默认参数,我们可以将这三个构造函数简化为一个,请看下面的代码:
#include <iostream>
using namespace std;
//复数类
class Complex{
public:
Complex(double real = 0.0, double imag = 0.0): m_real(real), m_imag(imag){ }
public:
friend ostream & operator<<(ostream &out, Complex &c); //友元函数
private:
double m_real; //实部
double m_imag; //虚部
};
//重载>>运算符
ostream & operator<<(ostream &out, Complex &c){
out << c.m_real <<" + "<< c.m_imag <<"i";;
return out;
}
int main(){
Complex a(10.0, 20.0); //向构造函数传递 2 个实参,不使用默认参数
Complex b(89.5); //向构造函数传递 1 个实参,使用 1 个默认参数
Complex c; //不向构造函数传递实参,使用全部默认参数
a = 25.5; //调用转换构造函数(向构造函数传递 1 个实参,使用 1 个默认参数)
return 0;
}
精简后的构造函数包含了两个默认参数,在调用它时可以省略部分或者全部实参,也就是可以向它传递 0 个、1 个、2 个实参。转换构造函数就是包含了一个参数的构造函数,恰好能够和其他两个普通的构造函数“融合”在一起。