C 學習歷程12 構造和析構

2021-10-08 16:09:51 字數 2961 閱讀 3562

建構函式語法:類名(){}

建構函式,沒有返回值也不寫void

函式名稱與類名相同

建構函式可以有引數,因此可以發生過載

程式在呼叫物件時候會自動呼叫構造,無須手動呼叫,而且只會呼叫一次

析構函式語法:~類名(){}

析構函式,沒有返回值也不寫void

函式名稱與類名相同,在名稱前加上符號 ~

析構函式不可以有引數,因此不可以發生過載

程式在物件銷毀前會自動呼叫析構,無須手動呼叫,而且只會呼叫一次

class person

//析構函式

~person()

};

兩種分類方式:

按引數分為: 有參構造和無參構造

按型別分為: 普通構造和拷貝構造(用乙個物件來初始化物件。簡單概括為直接結構體賦值而不是裡面的成員分別賦值)

三種呼叫方式:

括號法顯示法

隱式轉換法

//1、建構函式分類

// 按照引數分類分為 有參和無參構造 無參又稱為預設建構函式

// 按照型別分類分為 普通構造和拷貝構造

class person

//有參建構函式

person(int a)

//拷貝建構函式

person(const person& p)

//析構函式

~person()

public:

int age;

};//2、建構函式的呼叫

//呼叫無參建構函式

void test01()

//呼叫有參的建構函式

void test02()

int main()

class person 

person(int age)

person(const person& p)

//析構函式在釋放記憶體之前呼叫

~person()

public:

int mage;

};//1. 使用乙個已經建立完畢的物件來初始化乙個新物件

void test01()

//2. 值傳遞的方式給函式引數傳值

//相當於person p1 = p;

void dowork(person p1) {}

void test02()

//3. 以值方式返回區域性物件

person dowork2()

void test03()

int main()

class person 

//有參建構函式

person(int a)

//拷貝建構函式

person(const person& p)

//析構函式

~person()

public:

int age;

};void test01()

void test02()

int main()

淺拷貝:簡單的賦值拷貝操作

深拷貝:在堆區重新申請空間,進行拷貝操作

注意:如果屬性有在堆區開闢的,一定要自己提供拷貝建構函式,防止淺拷貝帶來的問題。

class person 

//有參建構函式

person(int age ,int height)

//拷貝建構函式

person(const person& p)

//析構函式

~person()

}public:

int m_age;

int* m_height;

};void test01()

int main()

原理是:屬性在堆區申請了空間,如果兩個物件做淺拷貝則兩個物件的同一屬性指向同一塊空間,在析構時會導致重複釋放一塊空間的值,造成錯誤。

class person 

//初始化列表方式初始化

person(int a, int b, int c) :m_a(a), m_b(b), m_c(c) {}

void printperson()

private:

int m_a;

int m_b;

int m_c;

};

構造的順序是 :先呼叫物件成員的構造,再呼叫本類構造

析構順序與構造相反

class phone

~phone()

string m_phonename;

};class person

~person()

void playgame()

string m_name;

phone m_phone;

};void test01()

int main()

靜態成員函式

class person

;int person::m_a = 10;

int person::m_b = 10;

void test01()

int main()

靜態成員函式例子

class person

static int m_a; //靜態成員變數

int m_b; //

private:

//靜態成員函式也是有訪問許可權的

static void func2() };

int person::m_a = 10;

void test01()

int main()

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 構造可分為兩個步驟 初始化列表和方法內賦值。前者的使用場景是 初始化,即...