zoukankan      html  css  js  c++  java
  • 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 未设定默认实参

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

  • 相关阅读:
    百度编辑器 Ueditor使用记录
    JS实现继承的几种方式
    IOS 浏览器上设置overflow: auto 不可滚动
    throw new Error('Cyclic dependency' + nodeRep)
    如何理解springaop
    SQL连接的分类
    Eclipse创建Maven-Web项目及解决 jre版本和web.xml版本问题
    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
    Centos7下面安装eclipse
    Centos7 下编译 Openjdk8
  • 原文地址:https://www.cnblogs.com/paulprayer/p/10118735.html
Copyright © 2011-2022 走看看