一、什麼是面向對象的程序設計?
對象:構成系統的基本單位。任何一個對象都具有兩個要素,屬性和行爲。
屬性:對象的靜態特徵;行爲:對象的動態特徵。
從外界向對象發着的信息,稱爲消息。
在一個系統中,多個對象之間通過一定的渠道相互聯繫,要使某一個對象實現某一種行爲(即操作),應當向它傳送相應的消息。對象之間就是這樣通過發送和接收消息互相聯繫的。首先確定哪些對象組成了這個系統。然後設計這些對象,組裝成爲一個複雜系統。這就是面向對象的程序設計方法。
二、面向對象設計中包含的一些定義
在C++中,每個對象都是由數據和函數兩部分組成的,對應對象中的屬性和行爲(也稱方法)。(數據——屬性)、(函數實現的功能——行爲)
調用對象中的函數就是向該對象傳送一個消息(message),要求該對象實現某一行爲(功能)。
2、封裝:把對你的內部實現和外部行爲分隔開來。它有兩方面的含義:一是將有關的數據和操作代碼封裝在一個對象中,形成一個基本單位,各個對象相對獨立,互不干擾;二是將對象中某些部分對外隱蔽,即隱蔽其內部細節,只留下少量接口,以便與外界聯繫,接收外界的消息。這一點的作法稱爲信息隱蔽。
3、抽象:程序設計中的抽象是表示同一類事物的本質。抽象的過程是將有關事物 的共性歸納、集中的過程。
4、類:類是對象的抽象,而對象是類的特例,或者說是類的具體表現形式。
5、繼承:利用已有的共性(類),開發新的特徵(子類),子類擁有父類的特徵就是所謂的繼承。這樣可以方便的利用一個已有的類建立一個新的類。
6、多態現象:接收同一消息時,各個對象做出的反應各不相同,分別執行不同的操作。
7、多態性:由繼承而產生的相關的不同的類,其對象對同一消息會作出不同的響應。
舊觀念:
程序=算法+數據結構
新觀念:
對象=算法+數據結構
程序=(對象+對象+對象+……)+消息 或 程序=對象s+消息
三、關於類的若干問題
1、類的聲明,一般形式如下:
class 類名
{
private:
私有的數據成員函數;
public:
公用的數據和成員函數;
};
被聲明爲私有的(private)成員,只能被本類中的成員函數引用,類外不能調用(友元類例外)。
被聲明爲公用的(public)成員,既可以被本類中的成員函數所引用,也可被類的作用域內的其他函數引用。
一個類體中,關鍵字private和public可以分別出現多次。
2、對象的定義方法:先聲明類的類型,然後再定義對象,兩種定義方法
(1)class 類名 對象名
(2)類名 對象名
3、struct聲明的類和class聲明的類的區別在於:
用struct聲明的類,如果對其成員不作private或public的聲明,系統將其默認爲public。
用class聲明的類,如果對其成員不作private或public的聲明,系統將其默認爲private。
建議儘量使用class來建立類。
4、成員函數在類外的定義方式
成員函數在類外定義時,必須在函數名前面加上類名,予以限定,“::”是作用域限定符或稱作用域運算符
::display() 或display()
則表示display函數不屬於任何類,這個函數不是成員函數,而是全局函數。
類函數必須先在類體中作原型聲明,然後在類外定義,否則編譯會出錯。
5、inline成員函數
a、爲了減少時間開銷,如果在類體中定義的成員函數中不包括循環等控制結構,C++系統會自動將它們作爲內置函數來處理。對在類體內定義的函數,一般都省寫inline。
b、如果在類體外定義inline函數,則必須將類定義和成員函數的定義都放在同一個頭文件中(或寫在同一個源文件中),否則編譯時無法進行轉換。
c、只有在類外定義的成員函數規模很小而調用頻率較高時,纔將此成員函數指定爲內置函數。
d//