• 【C++】构造函数与析构函数概念简介 ( 构造函数和析构函数引入 | 构造函数定义与调用 | 析构函数定义与调用 | 代码示例 )






    一、构造函数和析构函数引入



    在 C++ 语言中 , 创建对象时 , 需要进行对象创建的初始化工作 , 如 : 创建集合数组 , 为成员变量设置初始值 ;

    在 C++ 头文件中 , 声明类的时候 , 不能对类的成员变量设置初始值 , 因此就需要 设计 一个可以设置初始值的场景 ;


    为了解决上述 C++ 类 对象 初始化的问题 , C++ 编译器 提供了 " 构造函数 " , 在 构造函数 中 进行 类的实例对象 初始化操作 ;

    " 构造函数 " 是 C++ 类中的一种特殊的 " 成员函数 " , 该函数不需要用户手动调用 , 而是在 C++ 类 实例对象 创建时 , 自动执行的 ;


    " 析构函数 " 是 构造函数 的 对应相反的函数 , 构造函数是初始化对象 , 析构函数的作用是清理销毁实例对象用的 ;





    二、构造函数简介




    1、构造函数定义


    构造函数定义 : 下面介绍 C++ 类构造函数 的 声明定义 ;

    • 构造函数名称 : 构造函数 名称 与 类名相同 ;
    • 构造函数参数 : 构造函数 可以有 若干参数 , 也可以没有参数 ;
    • 构造函数返回值 : 构造函数 没有返回值 ;

    2、构造函数调用


    构造函数调用 :

    • 自动调用 : C++ 编译器会 在创建 C++ 类实例对象时 , 自动调用类的 构造函数 ;
    • 手动调用 : 构造函数 也可以手动调用 , 如调用构造函数的重载函数 ;

    3、代码示例 - 构造函数定义与调用


    定义了一个 C++ 类 Student , 并为该类定义 构造函数

    	Student()
    	{
    		cout << "构造函数" << endl;
    	}
    
    • 1
    • 2
    • 3
    • 4

    上述构造函数

    • 函数名称 是 Student , 与类名相同 ;
    • 没有函数参数 , 参数列表 可以设置若干 参数 ;
    • 没有返回值 , 构造函数 没有返回值 ;

    在 main 函数中 , 声明该 Student 类的 实例对象变量 , 就会自动调用构造函数创建 Student 实例对象 ;

    Student s1, s2;
    
    • 1

    在代码中声明了 2 个 Student 变量 , 构造函数调用了 2 次 ;


    代码示例 :

    #include "iostream"
    using namespace std;
    
    class Student
    {
    public:
    	Student()
    	{
    		cout << "构造函数" << endl;
    	}
    };
    
    int main()
    {
    	Student s1, s2;
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    执行结果 :

    构造函数
    构造函数
    Press any key to continue . . .
    
    • 1
    • 2
    • 3

    在这里插入图片描述





    三、析构函数简介




    1、析构函数定义


    析构函数定义 : 下面介绍 C++ 类 析构函数 的 声明定义 ;

    • 析构函数名称 : 析构函数 名称 是 ~类名 ;
    • 析构函数参数 : 析构函数 没有参数 ;
    • 析构函数返回值 : 析构函数 没有返回值 ;

    2、析构函数调用


    析构函数调用 :

    • 自动调用 : C++ 编译器会 在销毁 C++ 类实例对象时 , 自动调用类的 析构函数 ;

    3、代码示例 - 析构函数定义与调用


    定义 Student 类的析构函数 ,

    	~Student()
    	{
    		cout << "析构函数" << endl;
    	}
    
    • 1
    • 2
    • 3
    • 4

    在 main 函数中定义 Student 的两个实例对象 变量 Student s1, s2; ,

    main 函数执行结束 , 也就是程序终止时 , 会自动调用 ~Student() 析构函数 ,

    因此在程序退出前 , 会自动为 2 个 Student 对象调用析构函数 ;


    代码示例 :

    #include "iostream"
    using namespace std;
    
    class Student
    {
    public:
    	Student()
    	{
    		cout << "构造函数" << endl;
    	}
    
    	~Student()
    	{
    		cout << "析构函数" << endl;
    	}
    };
    
    int main()
    {
    	Student s1, s2;
    
    	// 控制台暂停 , 按任意键继续向后执行
    	system("pause");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    执行结果 :

    构造函数
    构造函数
    Press any key to continue . . .
    析构函数
    析构函数
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述


    注意 : 上述 构造函数 和 析构函数 各自调用了 2 次 ;

    构造函数
    构造函数
    Press any key to continue . . .
    析构函数
    析构函数
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在栈内存中定义了 Student s1, s2; 对象变量 ,

    栈内存的特点是 后进先出 ,

    创建时 , 第一个构造函数调用的是 s1 的构造函数 , 第二个构造函数调用的是 s2 的构造函数 ,

    销毁变量时 , 先销毁 s2 对象 , 调用 s2 对象的 析构函数 , 然后销毁 s1 , 调用 s1 对象的 析构函数 ;

  • 相关阅读:
    Kotlin语法学习(三)_Lambda编程
    云服务多语言 SDK
    为什么在桌面右键word、excel和ppt会出现“在笔记本中编辑”的字样?
    EEPROM芯片选型对比表
    注意 Laravel 清除缓存 php artisan cache:clear 的一个坑
    RetinaFace: Single-stage Dense Face Localisation in the Wild
    20220725树状数组入门反思
    基于JAVA校园拓展活动培训管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    Maven
    算法刷题:P1908 逆序对
  • 原文地址:https://blog.csdn.net/han1202012/article/details/132800232