C 類和物件的學習 part2 物件特性

2021-10-10 05:02:21 字數 3198 閱讀 2155

完成對物件的初始化和清理。

編譯器強制,自動呼叫。

建構函式語法:

類名(){}

析構函式語法:

~類名(){}

分類方式:

三種呼叫方式:

具體程式如下:

// arrayone.cpp -- small arrays of integers

#include

using

namespace std;

//建構函式的分類和呼叫

class

person

person

(int a)

person

(const person &p)

//記住這種寫法先,完成拷貝乙份一樣的進行構造

~person()

int age;};

intmain()

這裡展示了不同種類,不同呼叫方式下的建構函式使用。

用法:

// arrayone.cpp -- small arrays of integers

#include

using

namespace std;

//建構函式的分類和呼叫

class

person

person

(int age)

person

(const person &p)

~person()

int age_;};

//使用乙個已經構建的物件初始化乙個新物件

void

test01()

//值傳遞給函式引數傳值

void

doit

(person p)

void

test02()

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

person donow()

void

test03()

intmain()

這裡展示了不同方法下,拷貝建構函式的呼叫時機(呼叫方法)。

注意:拷貝建構函式的定義方法是比較特殊的,如下:

person

(const person &p)

所謂拷貝構造,就是複製了乙個新的類,尤其是以值方式返回區域性物件,涉及到的就是返回了乙個新的物件,這個物件不是p1的本體,若想為p1的本體,應當返回的是引用,即:

return

*this

;

並且,函式返回型別為引用,即:

person&

(const person &p)

建立乙個類,c++編譯器會給每個類都新增至少3個函式。

注意:如果寫了有參建構函式,就不再自動預設構造,但依然提供拷貝構造。

這裡的拷貝構造可以理解為自動新增了賦值語句,將類a資訊拷貝至類b。

注意:如果寫了拷貝建構函式,編譯器就不再提供其他的普通建構函式了。

這兩個注意的意思是要自己寫編譯器不提供的建構函式(如果要用的話)。

淺拷貝:簡單的賦值

深拷貝:在堆區重新申請記憶體空間,進行

淺拷貝問題:堆區記憶體重複釋放

這裡介紹初始化列表來初始化屬性的值,程式如下:

// arrayone.cpp -- small arrays of integers

#include

using

namespace std;

//建構函式的分類和呼叫

class

person

//通過初始化列表初始化屬性

person()

:a_(10

),b_(

20),c_

(30)//不必注釋該行,因為可以利用建構函式過載實現

//或者

person

(int a,

int b,

int c):a_

(a),

b_(b),c_

(c)int a_;

int b_;

int c_;};

void

test01()

intmain()

這裡介紹了三種初始化方法。

其中,傳統初始化就是利用有參建構函式,通過傳入數值來進行初始化。

進而第二種是列表初始化,但是這種列表只能初始化為固定的值,因為不再贅述。

第三種初始化實質是第一種的公升級改造,簡化了寫法,一目了然,很方便。

這裡用到了函式過載,本例中保留了兩個建構函式,在呼叫的時候可以觸發函式過載,從而選擇合適的建構函式。

(筆者本來以為寫錯了,準備注釋掉上乙個建構函式,但發現執行無誤,之後baidu發現是出現了函式過載,不得不肅然起敬!)

我們在定義類的時候,可以把其他類作為類成員定義,在以下**就展示了這一功能,並且加入了初始化列表。

// arrayone.cpp -- small arrays of integers

#include

using

namespace std;

#include

//類物件作為類成員

class

phone

string pname_;};

class

person

string name_;

phone phone_;};

//當其他類物件作為本類成員,先構造其他類物件,再構造自身

//析構的順序正好相反

void

test01()

intmain()

另外需要注意的是,在應用這一方法時,會先構造其他類物件,再構造自身,而析構順序正好相反。

這裡可以理解為現有零件,才能組裝成完整的類,所以是先構造用到的類物件。

程式執行結果如下:

靜態成員就是在成員變數和成員函式前加上關鍵字static,稱為靜態成員。

靜態成員分為:

靜態成員函式

關於靜態變數,找到了一篇不錯的文章:

2 物件與類

在乙個檔案中,只能有乙個公共類,但是可以有任意數量的非公共類。final修飾的例項,必須在構造物件時初始化 初始化塊 在乙個類的宣告中,可以包含任意多的 塊。只要構造這個類的物件,這些塊就會被執行。class employee public employee public static void m...

C 學習筆記4 物件和類

最近有點煩有點煩,還是學習使我快樂,嗯,學習使我快樂 過程性程式設計 首先考慮要遵循的步驟,然後考慮如何表示這些資料。物件導向程式設計 首先考慮資料 如何表示資料和如何使用資料 然後使用新的設計方案建立出程式。2.1 類規範 2.2 訪問控制 2.3 類和結構 結構具有與類相同的特性,它們唯一的區別...

物件導向 part2 屬性的特性

建立自定義物件最簡單的方式就是建立乙個object例項。然後新增方法和例項 var person new object person.name hi person.sayname function 為了實現js引擎。es定義了只有內部才用的特性 不能直接訪問 描述了屬性 es有兩種屬性 資料屬性和訪...