zoukankan      html  css  js  c++  java
  • C++中的构造析构函数

    一、构造函数

    1. 构造函数:这个成员函数名必须和类名相同,定义时可以有参数,但是不可以有任何返回类型的声明。

    2. 构造函数调用的三种方式

    Test t1(4);   //自动调用构造函数
    Test t2 = 5;  //自动调用构造函数
    Test t3 = Test(6); //主动调用构造函数

    3. 当类中已经写了构造函数了,C++将不再为类提供无参的空函数的默认构造函数。

    4. 当类中没有定义拷贝构造函数时,编译器会默认提供一个拷贝构造函数,简单的进行成员变量值复制,浅拷贝。拷贝构造函数的参数是同类对象的const引用,语义是用参数对象的内容初始化当前对象。

    Test(const Test &v)
    {......}

    函数调用时,若类的对象做为参数或返回,会自动调用拷贝构造函数,用来完成对象值的传递。也就意味在在已有数值的基础上生成新的对象。当直接用一个对象去初始化另一个对象时,也会自动调用拷贝构造函数。

    对象之间的赋值是通过拷贝构造函数实现的,类似于赋值符号"="重载,能赋值过去多少,取决于拷贝构造函数

    若是没有提供拷贝构造函数,C++提供的默认的拷贝构造函数会进行成员变量的全部一一拷贝,但不会做其它事情,比如申请内存。

    注意: 使用一个对象去初始化另一个对象使用的是拷贝构造函数,例如 Array a2=a1; 对象间的赋值调用的是"="重载,例如 a2=a1;

    5. 成员函数可以重载,构造函数也可以重载。

    6. 可以在代码中直接调用构造,产生一个临时对象,又立即析构了。

    7. 在类定义中成员变量是不允许被赋初值的,比如成员变量const int c; 若不在类中定义需要赋初值。

    类的const成员会被分配空间的,本质是只读变量。因为编译时不知道其值是多少,因此不会进入符号表。const成员变量必须在初始化列表中进行初始化

    8. 构造函数的初始化列表,格式为: 类名::类名():m1(v1), m2(v1,v2), m3(v3)  其中”类名::类名()”是构造函数,分号后面是初始化列表,m1 m2 m3是(类)成员变量,v1 v2 v3是初始化值。

    注意:成员变量的初始化顺序与声明的顺序相关,与在初始化列表中的顺序无关。初始化列表先于构造函数的函数体执行。

    9. 构造函数的调用次序为: 当类中的成员变量是其它类的对象时,首先调用成员变量的构造函数,调用顺序与声明顺序相同,之后再调用类自身的构造函数。

    析构函数的调用程序与对应的构造函数调用的次序相反。

    10. 构造函数使用默认参数挺好

    Test(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;      
    }
    //调用:
    Test t1;
    Test t1(1);
    Test t1(1, 2);

    二、析构函数

    1. 析构函数定义为 ~ClassName(),析构函数没有参数,没有任何返回类型的声明。析构函数只有一个,没有参数,因此不可重载。一个对象在销毁时自动调用析构函数。

  • 相关阅读:
    Word和WPS插件开发总结
    WPS报表导出插件
    基于FFmpeg的教学资源库的非MP4视频转换为MP4流程
    Node-WebKit推送信息调研
    (译)OpenID Connect的常见问题与答案(二)
    (译)欢迎来到OpenID Connect(一)
    Xxl-job的使用
    ELK+filebeat安装部署监控springboot日志
    分布式事物
    Prometheus监控Centos,Mysql,Docker
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/14585880.html
Copyright © 2011-2022 走看看