018_構造函數與析構函數的概念

  1. /*
    有關構造函數
    構造函數(constructor)來處理對象的初始化。構造函數是一種特殊的成員函數,
    與其他成員函數不同,不需要用戶來調用它,而是在建立對象時自動執行。

    1、構造函數定義及調用
    1)C++中的類可以定義與類名相同的特殊成員函數,這種與類名相同的成員函數叫做構造函數;
    2)構造函數在定義時可以有參數;
    3)沒有任何返回類型的聲明。
    2、構造函數的調用
    自動調用:一般情況下C++編譯器會 自動調用 構造函數
    手動調用:在一些情況下則需要手工調用構造函數

    有關析構函數
    3、析構函數定義及調用
    1)C++中的類可以定義一個特殊的成員函數清理對象,這個特殊的成員函數叫做析構函數
    語法:~ClassName()
    2)析構函數沒有參數也沒有任何返回類型的聲明
    3)析構函數在對象銷燬時自動被調用
    4)析構函數調用機制
    C++編譯器自動調用
    */

#define  _CRT_SECURE_NO_WARNINGS 
#include "string"
#include <stdexcept>
#include <iostream>
#include <iomanip>
using namespace std;

#if 1

class Test
{
public:
    Test()//無參數構造函數
    {
        cout << "我是構造函數 被執行了" << endl;
        p = (char *)malloc(100);
        strcpy(p, "hello world");
        a = 10;
    }
    void print()
    {
        cout << p << endl;
        cout << a << endl;
    }

    ~Test()//析構函數
    {
        if (p != NULL)
        {
            free(p);
        }
        cout << "我是析構函數 被調用了" << endl;
    }

private:
    int a;
    char *p;
protected:
};


//給對象搭建一個舞臺,研究對象的行爲
//注意對象的生命週期,只有生命週期結束的時候,纔會調用析構函數
void test()
{
    //先創建的對象後釋放
    Test t1;
    t1.print();
    printf("分隔符\n");

    Test t2;
    t2.print();
}

#endif

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章