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时会调用析构
    注意:对象的存储是在栈中,所以对象的释放是先释放后创建的对象.

  • 相关阅读:
    element中表单验证实例
    element中时间选择组件,设置default-value无效
    vue中,基于vue-seamless-scroll的无缝滚动实例
    element 表格多选时,修改选中行的背景色
    计算机组成原理11-DMA、数据完整性、分布式计算、大型DMP系统
    计算机组成原理10-总线、输入输出设备、I/O、机械硬盘、SSD硬盘
    计算机组成原理9-CPU组成、缓存、内存
    java基础-字符串
    SQL Server
    BG.Hive
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/8344028.html
Copyright © 2011-2022 走看看