建構函式 析構函式 成員函式(C 封裝例項)

2021-09-27 12:49:03 字數 2915 閱讀 9315

希望暴露public

希望隱藏private

物件例項化有兩種方式,從棧例項化,從堆(new出來的)例項化。

以誰做什麼作為核心。

public 放前面,private放後面(屬性可以定義為private格式)。

唯讀屬性,只有get方法,沒有set方法。

#include

#include

using

namespace std;

/** * 定義類:student

* 資料成員:m_strname

* 資料成員的封裝函式:setname()、getname()

*/class

student

// 定義資料成員封裝函式getname()

string getname()

//定義student類私有資料成員m_strname

private

: string m_strname;};

intmain()

棧區,儲存變數。

new分配的記憶體,是堆區。

全域性區,儲存全域性變數和靜態變數。

常量區,儲存常量。

**區,儲存**。

物件需要初始化,有的只有一次,有的需要初始化多次。

建構函式,會在物件例項化時被呼叫。

都有預設值的建構函式,稱為預設建構函式。

乙個類可以沒有預設建構函式,有別的建構函式也可以例項化物件。

可以全屏**,看到關鍵點可以暫停,記錄一下。因為螢幕太小,看著眼疼。或者全屏**的時候,把文字置頂。

c++中,建構函式與類名相同,析構函式前面加乙個波浪線。析構函式,可以進行資源釋放。

tips:class 宣告類,要小寫的c。建構函式,析構函式前面,不需要任何修飾。class結尾還需要分號;

#include

#include

using

namespace std;

/** * 定義類:student

* 資料成員:m_strname

* 無參建構函式:student()

* 有參建構函式:student(string _name)

* 拷貝建構函式:student(const student& stu)

* 析構函式:~student()

* 資料成員函式:setname(string _name)、getname()

*/class

student

student

(string _name)

student

(const student& stu)

~student()

void

setname

(string _name)

string getname()

private

: string m_strname;};

intmain

(void

)

輸出:(注意這裡new和delete是配對出現)

student(string _name)

慕課網~student()

#include

#include

using

namespace std;

/** * 定義類:student

* 資料成員:m_strname

* 無參建構函式:student()

* 有參建構函式:student(string _name)

* 拷貝建構函式:student(const student& stu)

* 析構函式:~student()

* 資料成員函式:setname(string _name)、getname()

*/class

student

student

(string _name)

student

(const student &stu)

~student()

void

setname

(string _name)

string getname()

private

: string m_strname;};

intmain

(void

)

這裡就不需要delete,自動釋放

student()

student(const student &stu)

慕課網~student()

~student()

malloc 和 free ,這兩個是庫函式,而在c++中 new 和 delete是運算子(和 + - * /一樣),在使用new的時可以看成使用預設使用建構函式+malloc,使用delete時可以看成使用析構函式+free。

如:

classa~

a()private:

char

* m;};

intmain()

這個程式執行後會報錯

所以1. delete a 僅釋放了a指標指向的全部記憶體空間,但是只呼叫了a[0]的析構函式,剩下的a[1]和a[2]中m申請的記憶體不能夠釋放,則造成了記憶體洩漏

2. delete a 釋放了a指標申請的記憶體並且呼叫析構函式釋放掉所有申請的記憶體

類的建構函式 析構函式 成員函式與賦值函式

類的建構函式 1 預設的拷貝建構函式 和 預設的賦值函式 均採用 位拷貝 而非 值拷貝 的方式來實現,若類中含有指標變數,不能採用預設的方式。2 如果類存在繼承關係,派生類必須在其初始化表裡呼叫基類的建構函式。3 類的const 常量只能在初始化表裡被初始化,因為它不能在函式體內用賦值的方式來初始化...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

C 建構函式,析構函式

一 建構函式 在建立類的物件時自動呼叫的乙個函式,主要是為物件本身做初始化工作 沒有返回值,名字和類的名字相同,因為是在建立物件時候自動呼叫的,所以必須型別為public的,可以帶引數,可以有多個 如果類中沒有建構函式,在下面三種情況下,會自動的新增預設的建構函式 1.如果類中有虛函式,或者類中有虛...