構造與析構的次序

2021-06-23 06:27:46 字數 1073 閱讀 5562

1、寫出執行結果:

// test1.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

class a

virtual ~a()

};class b:public a

virtual ~b()

private:

char *buf;

};void fun(a *a)

int _tmain(int argc, _tchar* argv)

解答:

// test1.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

// 定義乙個類:a

class a

// 類a的建構函式

virtual ~a() // 類a的析構函式

};// 定義乙個類b,繼承於類a

class b:public a

// 類b的析構函式

virtual ~b()

private:

char *buf;

};// 全域性函式

void fun(a *a)

// main函式

int _tmain(int argc, _tchar* argv)

// 過程說明:

/*1、a *a=new b(15);這一句,先呼叫b類的建構函式,而呼叫b類的建構函式時,因為b類是繼承於a類,所以還會先呼叫a類的建構函式,執行完a類的建構函式後,接著執行b類的建構函式的函式體中的內容。

2、fun(a);這一句,是將new的變數釋放掉。需要呼叫b類的析構函式,同理,也會呼叫a類的析構函式。

注意:1和2 兩個過程是對稱的,也就是說,先呼叫建構函式的類,後呼叫析構函式。

九 構造與析構

c 中的建構函式 如何給物件進行初始化?一般而言所有的物件都需要乙個確定的初始狀態 解決方案 為每個類都提供乙個public的initialize函式 物件建立後立即呼叫initialize函式進行初始化 插入9 1.cpp 上述解決方案initialize只是乙個普通的函式,必須顯示的呼叫 一旦由...

構造與析構函式

1 建構函式 作用 建立類物件,並初始化其成員。可定義多個進行過載 注 建構函式可以有引數,無返回型別,不能是虛函式,在類體外定義時其函式名前加上 類名 可過載 若乙個類物件是另乙個類物件的資料成員,那麼在建構函式建立物件時,作為資料成員的類物件要先呼叫自身的建構函式 區域性到整體 2 析構函式 作...

Swift 構造與析構

在某些情況下系統會自動生成乙個構造器。使用構造器時注意事項。在 swift 中採用繼承式初始化方式。如果沒有在類中實現任何指定構造器,那麼將繼承父類中的所有指定構造器。父類 class transport 無引數指定構造器 init str string 子類 class car transport...