C 16 多型版撲克牌遊戲

2021-10-01 16:45:46 字數 2796 閱讀 9006

16 多型版撲克牌遊戲

16.1 多種牌墩

皮納克爾牌墩:只使用9到a的牌,但要使用兩副牌

這個牌只要48張牌,牌24到47重複牌0到23 的牌點和花色

class

pinochledeck

;pinochledeck::

pinochledeck()

shuffle()

;}void pinochledeck::

shuffle()

}card pinochledeck::

deal_a_card()

int r =

(cards[ncard]%6

)+7;

//r=9-a

//牌墩分為一半(%24)再除以6來生成0-3的花色

int s =

(cards[ncard++]%

24)/6

;return

card

(r, s)

;}

在執行時切換牌墩

將my_deck宣告為多個類的物件,為每個牌墩都建立乙個物件,即使只使用其中一種型別——麻煩,浪費資源!

多型

在呼叫函式時,能自動呼叫當前物件的對應實現,即使實現不知道確定的型別

如果乙個函式時多型的,那麼總是能在執行呼叫該函式的正確版本

c++支援多態函式,必須無條件滿足兩個前提條件

涉及的類必須通過繼承來關聯,乙個必須從另乙個派生,或者都從乙個通用基類派生

函式必須在基類中宣告為virtual

派生類自動繼承基類的所有成員,無法訪問基類的私有成員

第三種訪問級別protected:為所有的派生類(包括派生類的派生類)賦予訪問許可權

任何由派生類重寫(override)的函式必須宣告為virtual

建構函式不能為虛

實現多型性的;另一種方式是從乙個通用基類(或成為「介面」)派生出各種牌墩類。作為抽象類的介面不能例項化,但可將乙個派生型別的物件的位址傳給乙個基型別的指標:1. 建立物件,2. 獲取他的位址,3. 將位址傳給乙個指標

ideck *pdeck;

//指向基型別ideck

//建立派生型別的物件,把他的位址賦給指標pdeck

pdeck =

new pinochledeckl;

//new動態分配記憶體..

.acard[i]

= pdeck-

>deal_a_card;

//等價於acard[i] = (*pdeck).deal_a_card;

介面(即基類)的指標可以再編譯的時候指向乙個派生類的物件,也可以在執行時根據實際情況指向不同型別的物件

class

ideck

;

在派生類宣告的第一行中,必須在基類名稱前附加public字首,這種情況下可以使用private和protected

繼承和虛函式的終極目標:1. 任何物件都可以在執行時選定,只要他的類從乙個通用基類派生;2. 將呼叫每個虛函式的正確實現

16.2 「純虛」和其他抽象事項

介面(或抽象類)包含純虛函式,純虛函式既不需要,也不期待有乙個具體實現,使用**=0**記號法來標識純虛函式。例如:

class

number

;

16.3 抽象類和介面

包含乙個或多個純虛函式(原型包含=0)的類稱為抽象類。

抽象類的乙個重要規則是不可以例項化,即不能用它宣告物件

抽象類主要是為他的子類起到乙個規範作用,從抽象類派生出子類,實現所有純虛函式,最後用子類例項化物件

用子類例項化(建立)物件之前,子類必須為所有純虛函式提供定義。

任何乙個函式沒有實現,當前類就還是抽象類,不可以例項化

每個子類都可採取它想要的任何方式實現所有服務(即純虛函式)

每個服務都需要實現,否則類不能例項化

每個類都要要嚴格遵守型別規定,包括返回型別和每個實參的型別,這為繼承層次結構制定了嚴格的紀律,編譯器能提早發現意外

16.4 物件導向和i/o

使用各種流類來擴充套件輸出

cout無限可擴充套件

要使乙個類可列印,只需要operator《函式

ostream &

operator

<<

(ostream &os,

const fraction &fr)

使用各種i/o流不僅能輸出到控制台(cout),還可輸出到任何檔案或字串

fraction fr

(1,1);

cout <<

"the value is: "

<較為具體的東西(子類)總是能傳給較常規的東西(基類)

總結:函式宣告為虛,在所有子類中同樣為虛,在子類中重寫函式時不需要新增virtual關鍵字

可能被重寫的任何成員函式都應宣告為虛

純虛函式在宣告他的類中通常無具體實現(即沒有函式定義)。用=0記號法宣告虛函式:

virtual void normalize = 0;含有至少乙個純虛函式的類稱為抽象類,不可用它例項化物件,雖然子類可以

抽象類主要用於建立介面,子類通過實現所有虛函式來提供一組服務

多型性解放了物件,避免他們相互依賴,因為物件自內建了執行服務的邏輯,正是「物件導向」一詞的由來,主要物件導向而非只是,面向類

轉。。。。。撲克牌遊戲

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.text using system.window...

基於c 的撲克牌遊戲

建立一副撲克,並完成洗牌 發牌 顯示 花色排序 面值排序 刪除一張牌 刪除一輪牌等操作。本程式新建了perdeck和playdeck兩個類,類perdeck表示某個人拿的牌,類playdeck表示四個人玩牌的過程,對原程式的修改較小。程式中用到了包含在標頭檔案stdlib.h中的函式srand 用來...

神奇的撲克牌遊戲

給大家介紹乙個神奇的撲克遊戲,珍藏已久,分享一下,這個遊戲,即可以鍛鍊思考,又可以練習程式設計演算法 拿55張撲克牌,任意分成若干堆,在桌面上從左到右,依次排成一行 對撲克牌做如下操作,從每一堆中取一張,形成新的一堆,放在最右邊,然後重複做這個操作,結論是 經過有限步操作,必然形成從左到右,數量依次...