总结出来的几种构造参数。
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; }