zoukankan      html  css  js  c++  java
  • 构造函数与析构函数

    构造函数:  它是函数,主要是用来构建对象,用来初始化成员变量.
    构造函数基本不主动调用.系统调用.如果没有构造函数无法构造对象,如果没有提供构造函数,系统会自动给生成一个默认的构造函数.

    注意: 默认的构造函数没有参数.

    调用时机: 当需要创建对象的时候
    在构建对象的时候,直接在对象后加小括号来调用不同的构造函数
    例如: students hello(18,2);

    构造函数定义:没有返回值不可以写void,函数名就是类名,参数随意.

    复制构造函数(拷贝构造函数)

    拷贝构造.通过一个已经构造的对象,构造一个新的对象出来.
    形式: 类名(类名& 对象名){xxxx};
    注意:如果提供了有参数的构造,还得提供一个默认构造.
    1.拷贝构造同样的函数名和类名相同,必须传入相同类型对象的引用.
    2.如果没有提供拷贝构造函数,系统会自动提供,如果提供后系统不再提供.
    3.默认提供的形参只会拷贝内容值(只会拷贝指针值),另个对象会使用同一个内存空间,
    释放是会释放两次,导致问题出现,所以对于类中new的内存,在拷贝构造的时候需要重新申请内存,后者叫做深拷贝.

    组合关系:
    在类中还有其他对象
    形式:class a{ 其他类名 对象名; 其他类名 对象名}
    构建: 先定义的先构建,后定义的后构建.
    如果其他类提供缺省的构造函数,在当前类的构造函数中可以不写其他类的构造
    如果其他类没有提供缺省构造,则必须在当前类的构造初始化列表中主动调用.


    特殊成员变量:
    const 成员变量 ; 必须在初始化列表中进行初始化.
    引申出: 初始化列表----在构造函数最后面加上冒号,加上括号的方式例如students() :m_age(18){} 初始化列表在构造函数之前执行
    static 静态成员变量,不属于某一个对象,属于整个类的,只可以在类外进行初始化,创建多个对象,只有一份内存空间,每个对象都可以去修改静态成员变量的值.
    static变量的使用: 类名::变量名

    const 函数
    特点: 没法修改成员变量的值,只可以访问成员变量
    不可以调用非const成员函数.
    案例: int fun()const{}

    析构函数:
    当对象创建之后,如果不需要了,程序员需要跟踪,不使用了需要释放.
    作用: 在对象释放时调用,也是系统调用,不可以主动调用
    如果没提供析构函数,系统默认提供析构.
    如果提供了,系统析构函数失效.
    样式: 没有返回值,函数名是类名前加~,没有参数.
    ~student(){xxxx}
    调用时机: 静态对象----整个程序结束时析构
    局部对象----当函数结束时
    new的对象---调用delete时会调用析构
    注意:对象的存储是在栈中,所以对象的释放是先释放后创建的对象.

  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8344028.html
Copyright © 2011-2022 走看看