C 學習筆記(八)

2021-08-29 09:39:43 字數 2269 閱讀 7039

類、類的建構函式和析構函式、this指標、物件陣列

1.c++區別於c語言的物件導向特性:抽象、封裝和資料隱藏、多型、繼承、**的可重用性

2.封裝:將實現細節放在一起並將它們與抽象分開。

3.資料隱藏(將資料放在類的私有部分中)是一種封裝。資料隱藏可以是資料變的安全,同時使得類的使用者無需關心資料是被如何表示的。

4.類物件預設訪問控制型別為私有(即未顯示宣告的變數預設為私有)。

5.定義位於類內部的函式都自動成為內聯函式。內聯函式要求在每個使用它們的檔案中都定義它,因此可以把它的定義放在定義類的標頭檔案中。

6.對於乙個類的不同物件,它們擁有各自的記憶體用於儲存各自的內部變數和類成員,但公用乙個類方法。

7.使得列印顯示兩位小數的格式:

cout.setf(ios_base::fixed);     //其中,ios_base是std命名空間中的乙個子空間

cout.precision(2);

cout.setf(ios_base::showpoint);

8.建構函式沒有宣告型別,在程式宣告物件時將自動呼叫建構函式。同時,建構函式的引數不能和類成員同名(防止賦值衝突)。

程式宣告物件時自動呼叫建構函式。

顯示呼叫構造:     stock food = stock ("world", 2, 1,25);

隱式呼叫構造:  stock garment("furry", 50, 2.5);

用new動態分配記憶體:  stock *pstock = new stock("electroshock ", 50 ,2.5);

上面的情況相當於new了乙個無名的stock物件,並用指標pstock對它進行管理。

建構函式可以建立物件,但不能被物件呼叫。因為在呼叫建構函式構造物件之前,這個物件並不存在。

9.關於預設構造引數可以參考鏈結

預設構造引數有兩種形式,一種是形如stock stock() ;   //未指定引數

另一種是形如stock stock( const char* m_co="error",int n=0,double m_val =10.3) ;   //指定引數

這兩種情況都是預設構造引數,當類中定義了以上兩種中的一種,則編輯器就不會再自動生成預設構造了。但兩種不能同時定義。預設構造引數存在的意義是為了能夠宣告 stock stock1(未給初始化值的物件)或new乙個沒有給定值的指標。但是允許預設構造引數與構造引數同時存在。如使用者可以同時定義上面的一種預設構造引數與如下宣告:

stock::stock(int n,double m_val)

shares=n;

val=m_val;

10.如果建構函式用new定義,則析構函式裡將呼叫delete,如果建構函式沒有new,則根據生存期,析構函式不用對物件進行操作。

11.可以將乙個物件賦給同型別的另乙個物件。

12.stock stock2= stock("boffo objects",2,2.0);

與stock1=stock("nofty foods",10,50.0);

之間有很大不同。第一條是初始化語句,建立有指定值的物件,可能會建立臨時物件(也可能不會,若建立臨時物件,會呼叫對應的臨時物件的析構函式),第二條語句是賦值,賦值過程中使用建構函式總會導致在賦值前創造乙個臨時物件。

初始化的效率要比賦值效率更高。

13.類方法(類的成員函式)不修改呼叫物件時,可以將它宣告為const,宣告的方法為將const放在函式定義的開頭,如:

void stock::show( ) const

14.建立類物件陣列必須該類有預設建構函式,因為:初始化物件陣列首先使用預設建構函式建立陣列元素然後用建構函式(未必是預設構造)建立臨時物件,再將臨時物件的內容複製到相應元素中一一對應。所以要建立類物件陣列必須要有預設構造。

15.由於類中宣告的常量作用域為整個類,但由於宣告類的過程並不分配記憶體只是描述物件的形式,因此不能在類宣告中為其分配記憶體,如下面描述是錯誤的:

class stock

private:

const int len=30;                    //注意,此種方法是錯誤的

char company[len];

可以有兩種方法更正,一種是使用enum;   的方式替代,用列舉型別並不會建立對應的類資料成員,即所有類的物件中都不會包含這個列舉,且len只是乙個符號,不被分配記憶體,編譯器將使用30替換它。

另一種方法是 static const int len=30;     這種方法引用static關鍵字,常量len被儲存在靜態變數存放的位置,而不會被儲存在物件中,因此len常量將只有乙個,被所有的stock物件共享。

C 學習筆記八

24 子物件 當乙個類的成員時另乙個類的物件時,該物件就為子物件。子物件即是物件的成員 當類中出現了子物件 物件成員 該類的建構函式要包含對子物件的初始化,通常採用成員初始化列表的方法來初始化子物件 include class a void print class b 成員初始化列表,私有成員可以通...

c 學習筆記八

函式 1 函式的過載 函式名相同,引數個數不同 引數個數相同,引數型別不同 函式的簽名 過載和指標引數 例如 int temp int pnum1,int pnum2 int temp long pnum1,long pnum2 過載和引用引數 過載和const引數 2 函式模板 乙個簡章的函式模版...

c 學習筆記八

函式 1 函式的過載 函式名相同,引數個數不同 引數個數相同,引數型別不同 函式的簽名 過載和指標引數 例如 int temp int pnum1,int pnum2 int temp long pnum1,long pnum2 過載和引用引數 過載和const引數 2 函式模板 乙個簡章的函式模版...