zoukankan      html  css  js  c++  java
  • C++笔记018:构造函数的调用规则

     


    原创笔记,转载请注明出处!

    点击【关注】,关注也是一种美德~


    一、默认构造函数

    两个特殊的构造函数

    1、默认无参构造函数

    当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空;

    2默认拷贝构造函数

    当类中没有定义拷贝构造函数时,编译器默认提供一个默认拷贝构造函数,简单的进行成员变量的值复制。

    二、构造函数调用规则

    1、当类中没有定义任何一个构造函数时,C++编译器会提供默认无参构造函数和默认拷贝构造函数;

    2、当类中定义了拷贝构造函数时,C++编译器不会提供无参构造函数;

    3、当类中定义了任意的非拷贝构造函数时(即,当类中提供了无参构造函数或有参构造函数),C++编译器不会提供无参构造函数;

    4、默认拷贝构造函数成员变量简答赋值。

    、案例分析

    1、没有定义构造函数时C++调用默认无参构造函数(编译通过)

    #include<iostream>

    using namespace std;

     

    class Function

    {

    private:

    int a;

    int b;

    };

     

    int main()

    {

    Function t1;

    system("pause");

    return 0;

    }

    上面程序中,我们没有定义构造函数,编译通过,C++自动调用默认无参构造函数。

     

    2、定义有参构造函数,C++不提供默认无参构造函数

     

    #include<iostream>

    using namespace std;

     

    class Function

    {

    //定义有参构造函数

    Function(int x,int y)

    {

    a=x;

    b=y;

    }

    private:

    int a;

    int b;

    };

     

    int main()

    {

    Function t1;

    system("pause");

    return 0;

    }

    看上面程序,定义一个有参构造函数,但是我们定义对象时候没有按照构造函数的参数形式进行赋值,这时候编译器会去寻找默认的无参构造函数,但是因为我们手动添加了有参的构造函数,因此编译器不再提供无参默认的构造函数,因此编译失败!

    但是,如果我们定义对象时,提供跟有参构造函数形参形式相对应的调用,那么就可以编译通过。关于拷贝构造函数也是一致的。如下程序:

    #include<iostream>

    using namespace std;

     

    class Function

    {

    public:

    //定义有参构造函数

    Function(int x,int y)

    {

    a=x;

    b=y;

    }

    private:

    int a;

    int b;

    };

     

    int main()

    {

    Function t1(1,2);

     

    system("pause");

    return 0;

    }

    总结

    1、如果你没自己手工写构造函数,那么就会自动调用默认的无参构造函数;

    2、如果你自己写了构造函数(不管是有参构造函数还是拷贝构造函数),那么编译器就不会再提供默认的无参构造函数了,你在定义对象时,就要根据构造函数形参的形式进行传递参数。(待补充)

    构造、析构阶段性总结:

    (1)构造函数时C++中用于初始化对象状态的特殊函数;

    (2)构造函数在对象创建时自动被调用;

    (3)构造函数和普通成员函数都遵循重载规则;

    (4)拷贝构造函数时对象正确初始化的重要保证;

    (5)必要的时候,必须手工编写拷贝构造函数。


    原创笔记,转载请注明出处!

    更多精彩请关注微信公众号:依法编程

     

     

     

    长按解锁

    解锁更多精彩内幕

    技术驱动生活


  • 相关阅读:
    攀岩
    插入排序
    runtime error
    vector
    旅行家
    九键字母组合
    [蓝桥杯][基础训练]Sine之舞
    代码计算程序运行的时间
    max_element
    distance
  • 原文地址:https://www.cnblogs.com/tyyhmtyyhm/p/8985675.html
Copyright © 2011-2022 走看看