• 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 未设定默认实参

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

  • 相关阅读:
    vue(5)
    vue(4)
    vue(3)-防止闪烁
    vue(2)
    bootstrap 模态框
    2017年上半年工作总结和计划
    vue(1)
    文本框数量加减功能
    meta 控制移动端页面的缩放
    题解 P1550 【[USACO08OCT]打井Watering Hole】
  • 原文地址:https://www.cnblogs.com/paulprayer/p/10118735.html
Copyright © 2020-2023  润新知