C 第10章 物件和類 知識點總結

2021-08-11 09:37:05 字數 2325 閱讀 9769

《c++ primer plus》第10章知識點總結

類規範由兩個部分組成

類宣告:以資料成員的方式描述資料部分,以成員函式(被稱為方法)的方式描述公有介面

類方法定義:描述如何實現類成員函式

介面 介面是乙個共享框架,供兩個系統(如計算機和印表機之間)互動時使用

封裝 將類的實現細節放在一起並將它們與抽象分開被稱為封裝。資料隱藏(將資料放在類的私有部分)是一種封裝,將實現的細節隱藏在私有部分也是封裝。封裝的另乙個例子是,將類函式定義和類宣告放在不同的檔案中。

預設訪問控制

類宣告中可以不必使用關鍵字private,因為這是類物件的預設訪問控制

結構的預設訪問型別時public

實現類成員函式

定義成員函式時,使用作用域解析運算子(::)來標識函式所屬的類

類方法可以訪問類的private元件

內聯方法

定義位於類宣告中的函式都將自動稱為內聯函式

如果願意,也可以在類宣告之外定義成員函式,並使其稱為內聯函式,只需在類實現部分中定義函式時使用inline限定符即可。如:

class stock{}

inline void stock::set_tot()

類的建構函式和析構函式

類建構函式

專門用於構造物件、將值賦給它們的資料成員

建構函式的引數名與類成員不能相同,否則最終**將會造成混亂。一種常見的做法是在資料成員名中使用m_字首或_字尾

使用建構函式

//顯示地呼叫建構函式

stock food=stock("world cabbage",250,1.25);

//隱式地呼叫建構函式

stock garment("furry mason",50,2.5);

但無法使用物件來呼叫建構函式,因為在建構函式構造出物件之前,物件是不存在的。因此建構函式被用來建立物件,而不能通過物件來呼叫。

預設建構函式

這是在未提供顯式初始值時,用來建立物件的建構函式

需要注意的是,當且僅當沒有定義任何建構函式時,編譯器才會提供預設建構函式。為類定義了建構函式後,程式設計師就必須為它提供預設建構函式。

預設建構函式沒有任何引數,因此如果建立物件時沒有進行顯式地初始化,則將呼叫預設建構函式。如果程式中沒有提供任何建構函式,則編譯器會為程式定義乙個預設建構函式;否則,必須自己提供預設建構函式。預設建構函式可以沒有任何引數;如果有,則必須給所有引數都提供預設值

定義預設建構函式的方法有兩種

(1)給已有建構函式的所有引數提供預設值。當用這種時,只需在宣告處寫了就可以,不用在定義中再具體寫

stock(const string& co="error",int n=0,double pr=0.0);

(2)通過函式過載來定義另乙個建構函式——乙個沒有引數的建構函式

stock();

由於只能由乙個預設建構函式,因此不要同時採用這兩種方式

析構函式

物件過期時,程式將自動呼叫乙個特殊的成員函式——析構函式,完成清理工作

和建構函式一樣,析構函式的名稱很特殊:在類名前加上~

析構函式沒有任何引數,因此stock析構函式必須是這樣的:~stock();

由於stock的析構函式可以不承擔任何重要的工作,因此可以將它編寫為不執行任何操作的函式

析構函式的呼叫

(1)如果建立的是靜態儲存類物件,則其析構函式將在程式結束時自動被呼叫

(2)如果建立的是自動儲存類物件,則其析構函式將在程式執行完**塊時(該物件是在其中定義的)自動被呼叫

(3)如果物件是通過new建立的,則它將駐留在棧記憶體或自由儲存區中,當使用delete來釋放記憶體時,其析構函式將自動呼叫

(4)程式可以建立臨時物件來完成特定的操作,在這種情況下,程式將在結束對該物件的使用時自動呼叫其析構函式

const成員函式

將const關鍵字放在函式的括號後面,表示保證函式不會修改呼叫物件,例:

void show() const;

this指標

this指標指向用來呼叫成員函式的物件

如果方法需要引用整個呼叫物件,則可以使用表示式*this

物件陣列

const int stks=4;

stock stock[stks]=

;

初始化物件陣列的方案是,首先使用預設建構函式建立陣列元素,然後花括號中的建構函式將建立臨時物件,然後將臨時物件的內容複製到相應的元素中。因此,要建立類物件陣列,則這個類必須有預設建構函式。

C 知識點 類和物件

c 知識點目錄索引 1.類和物件 2.類和物件的特點 3.具體例子 3.1 類的定義 類內定義成員函式 class person 類外定義成員函式 class person void date show 類外寫成員函式必須指明函式屬於哪乙個類域 void test 4.類的作用域 例 類的宣告 cl...

C 類 物件知識點

在類體內不允許對成員函式進行初始化。定義類時,類的資料成員不佔記憶體空間 但是,建立類的物件時,只為每個物件分配用於儲存資料成員的記憶體,不為函式成員分配記憶體。在定義類時,不能定義該類的變數,只能定義該類型別的指標成員和該類型別的引用成員。淺拷貝和深拷貝的區別 當類的資料成員是指標型別時,深拷貝能...

C 類知識點總結

c 類 1.定義抽象資料型別 1 成員函式的宣告必須在類的內部,它的定義既可以在類的內部也可以在類的外部。定義在類內部的函式是隱式的inline函式。this 2 成員函式通過乙個名為this的額外的隱式引數來訪問呼叫他的那個物件。當我們呼叫乙個成員函式時,用請求該函式的物件位址來初始化this。偽...