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

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

  • 相关阅读:
    SQL中JOIN 的用法
    ava中普通代码块,构造代码块,静态代码块区别及示例
    javabean的内省技术和BeanUtils的使用
    Tomcat服务器学习和使用(一)
    增强For循环
    JAVA单态设计模式
    关于枚举的整理
    java中遍历MAP的几种方法
    equals和==的区别
    深入剖析Java中的装箱和拆箱
  • 原文地址:https://www.cnblogs.com/paulprayer/p/10118735.html
Copyright © 2020-2023  润新知