05 c 構造和析構

2021-08-13 13:19:06 字數 1813 閱讀 3664

a、開闢單個物件的記憶體空間

格式1:指標變數名=new 型別識別符號;

格式2:指標變數名=new 型別識別符號(初始值);

例子:

int *a = new int(5) /* 開闢sizeof(int)位元組空間,並初始化為5 */
b、開闢陣列空間

指標變數名=new 型別名[下標表示式];

例子:

int *a = new int[100];    //開闢乙個大小為100的整型陣列空間
a、刪除單個物件的位址空間

int *a = new int;

delete a; //釋放單個int的空間

b、刪除陣列空間

int *a = new int[5];

delete a; //釋放int陣列空間

new/delete、new/delete要配套使用。參考文章:

建構函式就是和類名相同名字的乙個函式,乙個類可以有多個建構函式,在物件被建立時,根據引數的不同,將會自動呼叫類的建構函式

class person

person(char *name, int age, char *work = "none")/* 建構函式 */

}int main(int argc, char **argv)

在物件被銷毀的前一刻,析構函式被自動呼叫,乙個類只能有乙個析構函式。析構函式的名字和類名相同,只是在前面多了乙個符號 ~

class person

person(char *name)

person(char *name, int age , char *work = "none")

~person() /* 析構函式 */

};

在物件被建立的時候會有乙個預設的拷貝建構函式,該函式會對原物件進行的拷貝,那麼這就會產生乙個問題:在物件被銷毀的時候呼叫析構函式可能會引起同一段記憶體被釋放2次,顯然這是不合理的。

class person

person(char *name)

person(char *name, int age, char *work = "none")

person(person &per) /* 拷貝建構函式 */

~person()

if (this->work)

}};

a,建立多個物件,呼叫建構函式的順序是怎樣的?

按執行中定義物件的順序呼叫建構函式,靜態物件只呼叫一次建構函式,全域性物件在main函式執行前被構造

b,乙個類中的資料成員是另外乙個類,那麼在建立這個類的物件時,建構函式的呼叫順序是什麼?要給父類的建構函式傳遞引數該怎麼操作?

在建立物件時,父類的建構函式最先被呼叫。

class student

/* 給父類建構函式傳遞引數 */

student(int id, char *father, char *mother, int father_age = 40, int mother_age = 39):mother(mother,mother_age),father(father,father_age)

~student()

};int main(int argc, char **argv)

C 構造和析構

include using namespace std class b b b b b b int i data i b operator b b private int data b play b b int main output constructed by parameter 5 destr...

C 構造和析構

建構函式的作用是給類中的資料成員初始化,在乙個類物件產生的時候自動呼叫,建構函式分為帶參構造 無參構造。他倆唯一的區別就是乙個有引數,乙個沒引數,視實際情況使用 class cmyc cmyc cmyc cmyc cmyc int a,float b,char ch 它在乙個類物件被建立的時候自動呼...

C 構造和析構

1 繼承關係可認為,子類在父類的基礎上進行。從這個角度講,可把它認為穿衣 的過程。穿衣是 先穿內衣,再穿外套。是 先脫外套,在 構造是 先呼叫父類構造方法,再呼叫子類構造方法。析構是 先呼叫子類析構方法,再呼叫父類析構方法。2 構造可分為兩個步驟 初始化列表和方法內賦值。前者的使用場景是 初始化,即...