总结出来的几种构造参数。

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

Complex();  //没有参数


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

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


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

Complex(const Complex &c);


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

Complex(double real);

#include <iostream>
using namespace std;
//复数类
class Complex{
public:
    Complex(): m_real(0.0), m_imag(0.0){ }
    Complex(double real, double imag): m_real(real), m_imag(imag){ }
    Complex(double real): m_real(real), m_imag(0.0){ }  //转换构造函数
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;
}
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)

简化合并版本,除了拷贝构造函数,其他的都合并在一起了。

 Complex(double real = 0.0, double imag = 0.0): m_real(real), m_imag(imag){ }
int main(){
    Complex a(10.0, 20.0);  //向构造函数传递 2 个实参,不使用默认参数
    Complex b(89.5);  //向构造函数传递 1 个实参,使用 1 个默认参数
    Complex c;  //不向构造函数传递实参,使用全部默认参数
    a = 25.5;  //调用转换构造函数(向构造函数传递 1 个实参,使用 1 个默认参数)
    return 0;
}
12-27 09:47