一、基本概念
類和對象是面向對象中的兩個基本概念。“類”指的是一類事物,是一個抽象的概念“對象”指的是屬於某個類的一個實體,是一個具體存在的事物。
類是一種“模板”,可以通過這種模板創建出不同的對象“實例”。
對象“實例”是類“模板”的一個具體實現。
一個類可以有很多對象,而一個對象必然屬於某個類。
二、類和對象的意義
類用於抽象的描述一類事物所特有的屬性和行爲。
如:電腦類的每個對象都有CPU,內存和硬盤,電腦類的每個對象都可以開機和運行程序。
對象是一個具體的事物,擁有其所屬類的所有屬性,並且每個屬性都是一個特有的值。
如:老虎的每個對象(也就是每隻老虎),都有不同的體重,不同食量以及不同的性情
三、類之間的關係
1. 根據生活中的經驗,我們可以把事物進行分類,類之間的界限一般都是很清晰的,如電腦類和老虎類;
2. 但是一些類可以再細分,如電腦類可以再分爲Dell類,Sony類以及HP類等等;
3. 從同一個類細分出來的類和原來的類之間是有關係的,這種關係叫做繼承,如HP類繼承了電腦類;
4. 繼承的類擁有原類的所有屬性,如HP電腦就是一種電腦,HP電腦也同樣的擁有CPU,內存和硬盤;
四、深入理解類
1. 不但可以抽象的描述一類事物的屬性,也可以抽象的描述一類事物的行爲;
2. 從同一個類細分出來的類不但繼承了原有類的屬性同時也繼承了原有類的行爲;
3. 繼承出的新類可以擁有自己特有的屬性和行爲;
4. 屬性主要用於描述類的靜態特性,行爲主要用於描述類的動態特性;
如:老虎類的屬性有顏色,體重,而行爲有捕獵和逃跑,而兔子類的屬性也有顏色和體重,但是兔子類的行爲沒有捕獵,只有逃跑。另外,從一個更高的層面看,老虎和兔子都屬於動物類,它們都繼承了動物類的屬性和行爲,另外又又自己特定的屬性和行爲。
五、深入理解對象
1. 對象是一個類的實例,所謂實例即一個類中的特定的事物;
2. 一個類可以有多個實例,並且這些實例之間是互不相同的;
如:人這個類中有幾十億個不同的個體,每一個人都是人這個類的一個實例。
3. 對象和類的關係如同模具和成品的關係,類就是一個模具,利用這個模具可以生成多個不同的成品,而這些成品就是各不相同的對象;
4. 同一個類的不同對象都有對應的類中的屬性和行爲,但是這些屬性和行爲可能不完全相同;
六、類的表示方法
七、類的表示法—簡化
八、類的表示法—改進1
1. 這種表示法確實比畫圖的方法簡單,可是卻沒有表示出類之間的聯繫;
2. 關鍵問題是類之間的繼承關係沒有表示出來;
3. 繼承而來的屬性和行爲需要重複聲明;
九、類的表示法—改進2
1. 改進的方法簡單明瞭同時也能表示出類之間的聯繫;
2. 但是需要劃線來表示屬性和行爲,比較麻煩;
3. 考慮更簡單的表示法;
十、類的表示法—改進3
1. 改進2的方法即簡單又能夠清晰的表示類之間的關係
2. 但是C++編譯器卻不能明白,考慮把這種方法介紹給C++編譯器
3. 於是應用一些C語言的關鍵字和語法特性
十一、類的表示法—最終方案
1. 改進3的方法開始引入C語言的語法,將表示法推廣給編譯器
2. 考慮一下:是不是可以再改進一下讓編譯器完全讀懂呢?
3. 再找共同點:每個類中只有屬性和行爲,屬性是靜態特性,行爲是動態特性
4. C++編譯器支持變量和函數,根據相似性考慮用變量表示屬性,用函數表示行爲
#include <stdio.h>
struct Biology
{
bool living;
};
struct Animal : Biology
{
bool movable;
void findFood()
{
}
};
struct Plant : Biology
{
bool growable;
};
struct Beast : Animal
{
void sleep()
{
}
};
struct Human : Animal
{
void sleep()
{
printf("I'm sleeping...\n");
}
void work()
{
printf("I'm working...\n");
}
};
int main(int argc, char *argv[])
{
Human human;
human.living = true;
human.sleep();
human.work();
printf("Press any key to continue...");
getchar();
return 0;
}