W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
如果你對玩紙牌尚不熟悉,那最好現(xiàn)在就去拿一副,否則你會(huì)感覺這一章沒什么意思。一副牌有52張,每張都有一個(gè)花色(4種花色之一)和大?。?3個(gè)值之一)。按橋牌中下降的順序排列,4種花色分別是黑桃(Spades)、紅桃( Hearts)、方塊(Diamonds)和梅花(Clubs)。大小包括A、2、3、4、5、6、7、8、9、10、J、Q和K。根據(jù)不同紙牌游戲的規(guī)則,A可能比K大,也可能比2小。
如果要定義新對象表示紙牌,很明顯,實(shí)例變量應(yīng)該是大小和花色。不過,實(shí)例變量以什么類型定義可能就沒這么明顯了。一個(gè)方法是使用apstring類型,比如用字符串“Spade”表示花色,而用字符串“Queen”表示大小。其缺點(diǎn)是難以比較兩張牌的花色和大小。
另一個(gè)可選的方法是,使用整型數(shù)給大小和花色編碼。這里的編碼,并不是很多人認(rèn)為的加密(或者說譯成密碼)。在計(jì)算機(jī)科學(xué)家的心目中,編碼就像是在數(shù)字序列和希望表示的事物之間定義一個(gè)映射。例如,
Spades |→ 3
Hearts |→ 2
Diamonds |→ 1
Clubs |→ 0
“ |→”是表示映射的數(shù)學(xué)符號(hào)。該映射最明顯的特性是,花色按順序映射到整型數(shù),所以我們可以通過比較整型數(shù)來比較花色。牌大小的映射也是顯而易見的,每個(gè)數(shù)字大小映射到相應(yīng)的整型數(shù),帶人像的撲克牌以下面方式映射:
J |→ 11
Q |→ 12
K |→ 13
使用數(shù)學(xué)符號(hào)表示映射的原因是,映射并非C++程序的一部分,而是程序設(shè)計(jì)的一部分,但是它們從來不會(huì)顯式地出現(xiàn)在代碼中。Card類型的定義如下:
struct Card
{
int suit, rank;
Card ();
Card (int s, int r);
};
Card::Card () {
suit = 0; rank = 0;
}
Card::Card (int s, int r) {
suit = s; rank = r;
}
Card有兩個(gè)構(gòu)造函數(shù),構(gòu)造函數(shù)沒有返回類型且與結(jié)構(gòu)體同名,通過這兩點(diǎn)可以識(shí)別它們。第一個(gè)構(gòu)造函數(shù)不接受任何參數(shù),它把實(shí)例變量初始化為無效值(梅花0)。
第二個(gè)構(gòu)造函數(shù)更加有用,它有兩個(gè)參數(shù),分別是紙牌的花色和大小。
下面代碼創(chuàng)建了一個(gè)名為threeOfClubs的對象,它表示梅花3。
Card threeOfClubs (0, 3);
第一個(gè)參數(shù)0表示花色為梅花,第二個(gè)參數(shù)自然是表示牌的大小為3。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: