1. 程式人生 > >C++筆記004:C++類通俗點說

C++筆記004:C++類通俗點說

角色 詞匯 strong 程序設計 oid () 成員函數 兩個 ati

核心

C++的類就是對C語言的結構體進行了擴展,C++的結構體可以包含函數!

------------------------------------------------------

我們學習C++為什麽要復習C語言結構體呢?

在我看過的對C++進行講述的教材中,開篇往往是兩個字“對象”!因為C語言是面向過程的,而C++特色是面向對象!所以大多數書籍最開始就在說面向對象的事情。

但我在最初學習的過程中發現自己對“對象”這個詞匯....總是想偏,對這個詞匯雲裏霧裏的,什麽叫面向對象啊,看了一通沒看懂。所以我們先不深究什麽叫面向對象。

我們先來略看一下C語言中的結構體。對於這個大家應該是很熟悉的,如果對C語言結構體的概念有模糊,請自行查閱資料。

-----------------------------------------------------

C語言結構體

在C語言編程中,我們定義自己的身高,可以用整型int變量,定義一家人(比如三口人)的身高,可以用int型數組。

如果我們要表示某個遊戲中各個角色的姓名、身高(單位cm)、體重(單位kg),這三種並不是同一類型的數據,那我們就用到結構體了。

struct hero

{

unsigned char name[10];

int height;

float weight;

};

struct hero LuBan; //定義“LuBan”變量

結構體或稱結構,就像int、float等基本類型一樣,也是一種數據類型,使用戶自己定義的,它允許存儲不同類型的數據項,就像上面的hero結構體。就像打包封裝,把一些有共同特征(上面的身高體重等都屬於同一個角色)的變量封裝到內部,通過一定的方法訪問和修改這些內部變量。

關於更多的結構體的知識我們這裏不多說。

我們在結構體內部定義了一些變量,看到“LuBan”這個結構,我們就能查找到他的身高、體重等數據。

----------------------------------------------------

函數

LuBan角色具有“河豚手雷”這個技能,就像炒菜一樣,油、鹽、菜、蛋...出鍋!這樣一個順序就完成了一道美食,LuBan也是用一個順序完成了這個技能。左閃、右躲...殺!

這就是一個函數。

一個變量定義了一個角色的角色性質,一個函數定義了一個角色的大招使用過程!所以C語言的面向過程很好理解。

這個LuBan我們就可以叫做一個對象!他的身高、體重等這些變量我們稱之為“屬性”或者“狀態”,他具有的大招(能幹什麽)我們稱之為“行為”。

就像LuBan,這個角色有姓名、性別、身高、體重等這些“數量”,也就是變量=屬性=狀態;他可以吃飯、睡覺、打怪,這些行為=函數。所以,我們就叫C語言中的變量為“屬性”或“狀態”,C語言中的函數稱為“行為”。

------------------------------------------------------

結構到類

在C語言的結構體定義中,我們只是把變量放到了結構體中,而C++的類就是對C語言的結構體進行了擴展,C++的結構體可以包含函數!

舉個栗子:

struct hero

{

//屬性

unsigned char name[10];

int height;

float weight;

//行為

void eat()

{吃肉!} //僅做說明

void sleep()

{站著睡!}

void KillMonsters()

{使用河豚手雷打怪!}

}; //分號

struct hero LuBan; //定義“LuBan”變量

調用:

void main()

{

LuBan.height=150;

LuBan.weight=50;

LuBan.KillMonsters();

}

“角色”這個結構體的成員,與C語言不同,我們既有變量也有函數,變量和函數都屬於該結構體,變量叫成員變量,函數叫成員函數。C語言的結構智能描述一個對象的屬性,不能描述一個對象的行為。

在面向對象的程序設計中,對象具有屬性(狀態)和行為,屬性保存在成員變量中,行為通過成員方法(函數)來實現。成員方法又是什麽?

其實方法和函數可以理解為一回事。只是在C++中“函數”被稱之為“方法”。

-----------------------------------------------------

C++類的定義

前面看明白了,這個地方就不多說話!

結構體定義中的關鍵字struct換成class,就得到了C++中類的定義。

class Hero //類名習慣首字母大寫

{

//屬性

unsigned char name[10];

int height;

float weight;

//行為

void eat()

{吃肉!} //僅做說明

void sleep()

{站著睡!}

void KillMonsters()

{使用河豚手雷打怪!}

}; //分號

類定義的就叫對象。

Hero LuBan; //定義了一個Hero類的對象LuBan

C++筆記004:C++類通俗點說