使用多型提高程式擴充性舉例 1 遊戲

2022-01-24 03:30:49 字數 1920 閱讀 9240

假如一款打怪類的遊戲,遊戲中有多個不同的怪物:龍、天使、鳳凰、士兵等。怪物能夠互相攻擊,攻擊敵人和被攻擊時都有相應的動作。動作是通過物件的成員函式實現的。假如現在遊戲需要公升級:要增加新的怪物–雷鳥。

設定基類 ccreature,並且使cdragon, cwolf等其他類都從ccreature派生而來。

;//龍的**

class

cdragon

:public ccreature

void

attack

( cghost * pghost)

void hurted (

int npower)

void

fightback

( cwolf * pwolf)

void

fightback

( cghost * pghost)

//攻擊其他怪物

//反擊其他怪物

}// 其他怪物類同樣也需要寫類似的**

有n種怪物,cdragon 類中就會有n個 attack 成員函式,以及 n個fightback成員函式。對於其他類也如此。

當遊戲公升級時,按照這種程式設計思想,需要修改每乙個類(增加兩個成員函式:攻擊和反擊)。這樣程式改動非常大。

class

ccreature

virtual

void

hurted

(int npower)

virtual

void

fightback

( ccreature * pcreature)};

class

cdragon

:public ccreature

;void cdragon::

attack

(ccreature * p)

//接收乙個基類指標

void cdragon::

hurted

(int npower)

void cdragon::

fightback

(ccreature * p)

//接收乙個基類指標

//其他怪物也寫類似與龍的**

使用多型思想實現的好處:只需要編寫新類cthunderbird, 不需要在已有的類裡專門為新怪物增加成員函式:

void

attack

( cthunderbird * pthunderbird)

;void

fightback

( cthunderbird * pthunderbird)

;

已有的類可以原封不動,程式改動非常小。

int main()
以龍攻擊狼為例:

dragon.

attack

(& wolf)

;

龍的攻擊函式的形參是乙個指向基類的指標,而這個指標現在指向乙隻狼wolf,當進入龍物件的攻擊函式時,首先執行:

p-

>

hurted

(m_npower)

;//多型

即,執行受傷函式時,由於p是基類指標,而hurted是虛函式,因此這條語句使用了多型。由於這裡p實際是指向狼物件wolf的,因此這條語句執行狼 wolf物件的hurted函式。這裡傳遞的引數便是這條龍的攻擊力,這個引數是protected的,因此基類可以直接訪問。因此執行狼的受傷函式時,狼減少對應的血量。

提高程式安全性

1 防止sql 注入攻擊 一 sql注入簡介 sql注入是比較常見的網路攻擊方式之一,它不是利用作業系統的bug來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過sql語句,實現無帳號登入,甚至篡改資料庫。二 sql注入攻擊的總體思路 1.尋找到sql注入的位置 2.判斷伺服器型別和後台資料庫型別...

提高程式可讀性

在程式設計過程中注意提高程式的可讀性是良好的程式設計習慣,這使程式更易於理解,也更容易在以後進行修改和更正。同時也有助於我們理清自己的程式設計思路。為了避免步入 的wading,可讀性是必要的。不僅追求效率,也追求優雅,也即 乾淨利落的抽象 crisp abstraction 出自grady 物件導...

C 如何提高程式可讀性

程式的可讀性高是乙個程式設計師良好的程式設計習慣的體現。可讀性高可以讓程式設計師更好的理解冗長的 同時也更容易發現錯誤並且修改。不僅如此,在你請求別人對你的程式進行修改時,也能讓別人更好的進行修改工作。否找面對一坨坨的 段,恐怕沒人願意讀下去吧。所以這裡就提供幾個提高程式可讀性的技巧,如果你覺得自己...