C 自學筆記 8 之封裝與類外定義

2021-09-13 10:55:47 字數 1925 閱讀 2030

面對物件的基本思想,將所有的資料操作在呼叫成員函式操作中完成

**好處:**1.對於一些資料輸入格式上無問題而違反常識的可以通過類內的函式進行限制,如下圖就限制了age要在0到100之間

2.對於某些只需要輸入而不需要更改的資料,在用類封裝方面更好。

如下圖只可以獲取m_iwheelcount,並設定m_iwheelcount為私有屬性,無法更改。

來看乙個例子

//包含system命名空間的標頭檔案

#include

using namespace std;

class student

string getname()

//將m_strname return出去

void

setgender

(string _gender)

string getgenter()

intgetscore()

//由於score唯讀,因此只有get函式

void

initscore()

//對score初始化

void

study

(int _score)

//傳入_score,通過study的引數增加m_iscore的值

private:

string m_strname;

//這裡所有的資料成員都在原來格式前加上 m_資料格式 以確定其為定義在類內的資料成員

string m_strgender;

int m_iscore;};

intmain

(void

)這裡類中定義的m_iscore只是宣告,沒有例項化。且在private下定義的變數只有類的內部方法才能修改,一般初始化都放在建構函式中。如果沒有初始化m_iscore+=_score;的運算結果不一定。

類內定義的函式,編譯器會優先編譯成內聯函式(不用特意寫),對於複雜無法編譯成內聯函式的,會編譯成普通函式。

類外定義分為同檔案類外定義與分檔案類外定義

同檔案類外定義時,採用void car::run(){}的格式進行類外定義

例如前面的程式在定義類的函式時直接羅列出來

class student

;

然後再類的外部定義函式,以void setname(string _name)為例

void student:

:setname

(string _name)

//類外定義

之後在int main函式中呼叫與前面相同

分檔案類外定義的首先要在 ***.**件中定義類,且類的名稱最好與檔名相同。並將該檔案作為標頭檔案匯入進所需的cpp檔案

**實現的時候直接將前面兩段的第一段放進標頭檔案裡,第二段及main函式的內容放進cpp檔案中即可。

C 自學筆記 15)之隱藏與isA

隱藏就是當父類與子類定義相同的成員時,子類從父類繼承來的成員會隱藏掉,例項化時呼叫子類的成員。如上圖在定義兩個有繼承關係的類後,下圖中例項化後紅色語句第一行是呼叫子類的play,第二行是呼叫父類的play。1 如果是定義了同名的資料成員需要在子類的成員函式中呼叫時區分的話,如父類的string co...

C 自學筆記 5 之函式特性 與c相比

有預設值的引數必須寫在參數列的最右端,如圖 推薦在宣告的時候指定引數的預設值,定義的時候不指定,如下圖 無實參使用預設值,否則實參覆蓋預設值 在相同作用域內,同一函式名定義的多個函式,引數個數和引數型別不同,如 int max int a,int b,intc float max float a,f...

C 學習筆記8 成員物件與封閉類

1 定義 有成員物件的類叫封閉類。2 例子 見本工程closeclass.cpp 封閉類例子 include using namespace std class ctyre 輪胎類 class cengine class ccar 使用了初始化列表 ccar ccar int p,int tr,in...