0708學習總結 建構函式,析構函式,關鍵字

2021-08-03 13:55:49 字數 3040 閱讀 9480

一.物件導向的特徵:封裝,繼承,多型

二.類是一種宣告,不佔記憶體

兩種建立物件的方式:

1.一種是在棧上建立,形式和定義普通變數類似;

2.一種是在堆上建立,必須要用乙個指標指向它。delete釋放到不再使用的物件。

三.申請空間使用類成員

1.student *stu = new student;

stu-> ....

delete stu;

2.student *stu = new student[10];

stu[0]. ...

stu[1]. ...

delete stu;

3.student stu1;

student *pstu = &stu1;

pstu-> ...

注:類定義時,不能對成員變數賦值

四.在類內宣告,在類外定義

注:在類的內部,三種許可權可以互相訪問

**:#include

using namespace std;

class student

;void student::name(char *name)

aoid student::age(int age)

void student::score(float score)

void student::print()

int main()

四.建構函式

1.名字和類相同

2.無返回值

3.不需要顯示呼叫

4.建立物件時自動執行

注:建構函式必須是 public 屬性的,否則建立物件時無法呼叫。當然,設定為 private、protected 屬性也不會報錯,但是沒有意義。

例子:#include

using namespace std;

class student

;student::student(char *name,int age,float score)

void student::print()

int main()

注:1.函式在**區分配記憶體

2.成員物件在棧上,堆上分配記憶體

建構函式的過載:

1.建構函式的呼叫是強制性的,一旦在類中定義了建構函式,那麼建立物件時就一定要呼叫,不呼叫是錯誤的。如果有多個過載的建構函式,那麼建立物件時提供的實參必須和其中的乙個建構函式匹配;

2.反過來說,建立物件時只有乙個建構函式會被呼叫

五.初始化成員列表

例:student::student(char *name,int age,float score):m_name(name),m_age(age),m_score(score){}

注:與成員在類中的宣告的順序有關

六.析構函式

1.無返回值

2.不要顯示呼叫

3.程式銷毀時自動執行

例:#include

using namespace std;

class area

;area::area(int a,int b)

area::~area()

void area::print()

int main()

注意:1.析構函式沒有引數,不能被過載,因此乙個類只能有乙個析構函式。

2.如果使用者沒有定義,編譯器會自動生成乙個預設的析構函式

析構函式執行時機:

1.在所有函式之外建立的物件是全域性物件,它和全域性變數類似,位於記憶體分割槽中的全域性資料區,程式在結束執行時會呼叫這些物件的析構函式。

2.在函式內部建立的物件是區域性物件,它和區域性變數類似,位於棧區,函式執行結束時會呼叫這些物件的析構函式

七.const

1.初始化const成員變數:

2.引數初始化表還有乙個很重要的作用,那就是初始化 const 成員變數。

3.初始化 const 成員變數的唯一方法就是使用引數初始化表

八.this指標

this 是 c++ 中的乙個關鍵字,也是乙個 const 指標,它指向當前物件,通過它可以訪問當前物件的所有成員。

所謂當前物件,是指正在使用的物件。

注意:1.this 只能用在類的內部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。

2.this 是乙個指標,要用->來訪問成員變數或成員函式。

3.this 是 const 指標,它的值是不能被修改的,一切企圖修改該指標的操作,如賦值、遞增、遞減等都是不允許的。

4.this 只能在成員函式內部使用,用在其他地方沒有意義,也是非法的。

只有當物件被建立後 this 才有意義,因此不能在 static 成員函式中使用(後續會講到 static 成員)

this是什麼?

1.this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。

2.不過 this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。

3.this 作為隱式形參,本質上是成員函式的區域性變數,所以只能用在成員函式的內部,並且只有在通過物件呼叫成員函式時才給 this 賦值

九.static成員變數

在c++中,我們可以使用靜態成員變數來實現多個物件共享資料的目標。

靜態成員變數是一種特殊的成員變數,它被關鍵字static修飾,

static 成員變數屬於類,不屬於某個具體的物件,即使建立多個物件,也只為 m_total 分配乙份記憶體,所有物件使用的都是這份記憶體中的資料。

當某個物件修改了 m_total,也會影響到其他物件。

注意:static 成員變數必須在類宣告的外部初始化,具體形式為:     type   class::name = value;

靜態成員變數在初始化時不能再加 static,但必須要有資料型別。

被 private、protected、public 修飾的靜態成員變數都可以用這種方式初始化。

注意:static 成員變數的記憶體既不是在宣告類時分配,也不是在建立物件時分配,而是在(類外)初始化時分配。

反過來說,*沒有在類外初始化的 static 成員變數不能使用

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

說析構函式之前,先說下建構函式。建構函式用來完成對物件的一系列初始化操作,主要作用有 1.給建立的物件建立乙個識別符號 2.為物件資料成員開闢記憶體空間 3.完成物件資料成員的初始化 當並未顯示的定義建構函式時,會生成乙個預設的建構函式,預設建構函式不能完成物件資料成員的初始化,只能給物件建立一識別...

構造 析構函式

e09不能在構造 析構函式中呼叫虛函式 類名 default 隱式宣告為內聯函式,在類外定義時使用default則不是內聯函式cp449 類名 給定實參 成員1 實參1 1.最好按照宣告次序進行初始化ep29,cp259 2.效率高於函式體拷貝初始化 3.delegating constructor...

C 學習 構造 析構函式

一.建構函式 何時呼叫建構函式 class1 cl new class1 new運算子為物件分配記憶體,然後再呼叫物件的建構函式。1 建構函式 無返回值 與類同名,可以過載,在生成類的例項時呼叫,可以初始化字段,當然也可以加入 獲取目前生成的例項數 class mode 2 靜態建構函式 初始化靜態...