物件導向程式設計(oop)是一種特殊的、設計程式的概念性方法,oop重要特性如下:
(1) 抽象
(2) 封裝和資料隱藏
(3) 多型
(4) 繼承
(5) **的可重用性
採用書本描述的案例說明,能更容易的讓人理解過程性程式設計與物件導向程式設計。
壘球隊的一名新球員被要求記錄球隊的統計資料,會優先考慮使用計算機來完成這項工作,下面描述下過程性程式設計與oop程式設計思想不同之處:
2.1 過程性程式設計
(1)考慮輸入每名選手的姓名、擊球次數、擊中次數、命中率及其它重要基本資料
(2)還需要顯示記錄的資料及計算結果(命中率等)
如何完成上述功能工作呢?
(1)可以讓main()函式呼叫乙個函式來獲取輸入
(2)呼叫另乙個函式進行計算
(3)呼叫第三個函式顯示結果
如果獲取下一場的資料後又該怎麼做呢?
(1)若不想從頭開始,可以新增乙個函式來更新統計資料
(2)可能需要在main()函式中新增乙個選單,選擇是輸入、計算、更新還是顯示資料。
如何表示記錄統計與計算的資料呢?
(1)可以使用乙個字串來儲存選手姓名
(2)使用乙個陣列來儲存每一位選手的擊球數
(3)使用乙個陣列來儲存擊中數目等
(4)或者可以設計乙個結構來儲存每位選手的所有資訊,然後使用這種結構組成的陣列來表示整個球隊
總之,使用過程性程式設計方法時,首先考慮要遵循的步驟,然後考慮如何表示這些資料。
2.2 物件導向程式設計(oop)
(1)考慮如何表示資料,還要考慮如何使用資料
(2)考慮以誰為主體去記錄處理資料,當然是選手。
(3)因此要有乙個物件去表示整個選手的各個方面,這將作為基本資料單元—乙個表示選手的姓名和統計資料的物件。
如何對資料進行處理呢?
(1)首先需要一種將基本資訊加入到該單元中的方法
(2)其次,計算機應計算一些東西,如命中率等。因此需要新增一些執行計算的方法
(3)程式應自動完成這些計算,而無需使用者干涉
(4)還需要一些更新和顯示資訊的方法
(5)所以使用者與資料互動的方式有三種:初始化、更新、報告;這就是使用者介面
總之,採用oop程式設計方法時,首先從使用者的角度考慮物件—描述物件所需要的資料以及描述使用者與資料互動所需的操作。完成對介面的描述後,需要確定如何實現介面和資料儲存。最後,使用新的設計方案建立出執行程式。
3.1 抽象
生活中充滿複雜性,處理複雜性的方法之一是簡化和抽象。抽象是通往使用者定義型別的捷徑。
在c++中,使用者定義型別指的是實現抽象介面的類設計。
3.2 型別
將變數宣告為int或float指標時,不僅僅是分配記憶體,還規定了可對變數執行的操作。總之,指定基本型別完成了三項工作:
(1)決定資料物件需要的記憶體數量
(2)決定如何解釋記憶體中的位(long和float在記憶體中占用的位數相同,但將它們轉換為數值的方法不同)
(3)決定可使用資料物件執行的操作或方法
3.3 c++中的類
類是一種將抽象轉換為使用者定義型別的c++工具,它將資料表示和操縱資料的方法組合成乙個整潔的包。
定義類時,類規範一般由兩部分組成:
(1)類宣告:以資料成員的方式描述資料部分,以成員函式(常被稱為方法)的方式描述公有介面
(2)類方法定義:描述如何實現類成員函式
簡單的說,就是類宣告提供了類的藍圖,而方法定義則提供了細節。
3.4 什麼是介面
介面是乙個共享框架,共兩個系統互動時使用(如計算機與印表機之間或者使用者與計算機之間)
3.5 設計類步驟
(1)c++程式設計師將介面(類宣告)放在標頭檔案中
(2)將實現(類方法的**)放在源**檔案中
以下**為類宣告:
class
stock
public
:void
acquire
(const std::string &co,
long n,
double pr)
;void
buy(
long num,
double price)
;void
sell
(long num,
double price)
;void
update
(double price)
;void
show()
;};
4.1 訪問控制
(1)使用類物件的程式都可以直接訪問公有部分,但只能通過公有成員函式(或友元函式)來訪問物件的私有成員。
(2)資料隱藏:防止程式直接訪問資料。
(3)封裝:將實現細節放在一起並將它們與抽象分開,類設計盡可能將公有介面與實現細節分開,說明幾種情況下的封裝:
a、資料隱藏(將資料放在類的私有部分)是一種封裝
b、將實現的細節隱藏在私有部分中是一種封裝
c、將類函式定義和類宣告放在不同檔案中也是一種宣告
4.2 公有與私有
無論類成員是資料成員還是成員函式,都可以在類的公有部分或私有部分中宣告它。但由於資料隱藏是oop的目標之一,因此資料項通常放在私有部分,組成類介面的成員函式放在公有部分。
不必在類宣告中使用關鍵字private,因為這是類物件的預設訪問控制,舉例說明:
class
world
;
類和結構的區別:
結構的預設訪問型別是public,類預設訪問型別是private
類與結構使用情況:
c++通常使用類來實現類描述,而把結構限制為只表示純粹的資料物件(常被稱為普通老式資料(pod,plain old data))結構。
4.3 類成員函式實現
成員函式定義與常規函式定義非常相似,它們有函式頭與函式體,也可以有返回型別和引數。但它們有兩個特殊的特徵:
(1)定義成員函式時,使用作用域解析運算子(::)來標識函式所屬的類
(2)類方法可以訪問類的private元件(資料成員)
類方法的完整名稱中包括類名。比如,stock::update()是函式的限定名,而簡單的update()是全名的縮寫(非限定名),它只能在類作用域中使用。
4.4 內聯方法
其定義(函式原型與函式實現放在一起)位於類宣告中的函式都將自動成為內聯函式。
類宣告常將短小的成員函式作為內聯函式。
內聯函式另一種實現方式:
可以在類宣告之外定義成員函式,並使其成為內聯函式。只需要在類實現部分中定義函式時使用inline限定符即可,**舉例:
class
stock
;inline
void stock::
set_tot()
// 在定義中使用inline關鍵字
說明1:內聯函式的特殊規則要求在每個使用它們的檔案中都對其進行定義,確保內聯定義對多檔案程式中的所有檔案都是可用、最簡單的方式:將內聯定義放在類宣告的標頭檔案中。
說明2:根據改寫規則,在類宣告中定義方法等同於用原型替換方法定義,然後在類宣告的後面將定義改寫為內聯函式。
vs 2008 版本之說明
visual.studio.2008.express.edition 速成版 適應於初學者,功能簡單方便.visual.studio.2008.express.edition.cns 速成版的簡體中文版。visual.studio.2008.professional.edition.專業版 適合個人...
C 類的前置說明
今天一朋友問及 c 中的前置宣告問題,下面是我給出的回答。在編寫c 程式的時候,偶爾需要用到前置宣告 forward declaration 下面的程式中,帶注釋的那行就是類 b的前置說明。這是必須的,因為類 a中用到了類 b,而類 b的宣告出現在類 a的後面。如果沒有類 b的前置說明,下面的程式將...
關於 類的 virtual 例項 說明 (c )
using system using system.collections.generic using system.text public class classboy classfather public class classgirl classfather endregion region ...