007.C++构造函数

1.一个引例

//class head
class complex
//class body {}
{
public:
    complex(double r=0, double i)
        :re(r), im(i)
    {}//构造函数
    complex& operator += (const complex&);
    double real() const { return re; }//获取实部的函数
    double imag() const { return im; }//获取虚部的函数
private:
    double re, im;

    friend complex& __doapl(complex*, const complex&);
};

2.构造函数的特点

  1. 构造函数名称与类名相同;
  2. 没有任何返回值类型,因为不需要;
  3. 可以用初始列的方式定义默认实参;

3.初始列定义构造函数默认实参

注意,一般的函数也是可以定义默认实参的,以下就是一个通用的方式

complex (double r = 0, dobule i = 0)
{ re = r;   im = i;} //赋值语句

然而,上面的方式效率不是最高的。一般地,数据处理有两个阶段,即“初始化”和“赋值”,上面的方式直接跳过了阶段一,效率偏低。

对于构造函数,可以使用初始列(初值列)的方式来定义默认实参,充分利用这种特殊性。

complex ( double r = 0, double i = 0)
     : re(r), im(i)     //初值列
     {}

4.构造函数的调用

4.1设定了默认实参

#include <iostream>
using namespace std;

class complex
    //class body {}
{
public:
    complex(double r = 0, double i = 0)
        :re(r), im(i)
    {}//构造函数
    complex& operator += (const complex&);
    double real() const { return re; }//获取实部的函数
    double imag() const { return im; }//获取虚部的函数
private:
    double re, im;

    friend complex& __doapl(complex*, const complex&);
};


int main() {
    complex c1(2, 1); //方法一:传递两个参数
    complex c2;         //方法二:不传递参数,因为有设定默认参数

    cout << "c1=" << c1.real() << "+" << c1.imag() << "i" << endl;
    cout << "c2=" << c2.real() << "+" << c2.imag() << "i" << endl;

    return 0;
}

4.2 未设定默认实参

此时,只支持方法一调用,不支持方法二调用。

原文地址:https://www.cnblogs.com/paulprayer/p/10118735.html