W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
對于像int和double這樣的基本類型,可以使用比較操作符比較值并判斷大小。不過這些操作符(如等等)不適用于用戶定義類型。就像上一節(jié),為了實(shí)現(xiàn)類似==操作符的功能,我們定義了equals函數(shù),現(xiàn)在我們來寫一個(gè)比較函數(shù)以實(shí)現(xiàn)類似>操作符的作用。 后面,我們會使用這個(gè)函數(shù)對一副牌進(jìn)行排序。
有些集合是完全有序的,也就是說集合中的任意兩個(gè)元素都可以比較大小。例如,整型數(shù)集合和浮點(diǎn)數(shù)集合就是完全有序的。 而有的集合是無序的,即不存在有意義的方法來比較集合中兩個(gè)元素的大小。例如,水果的集合就是無序的,這也是我們無法比較蘋果和句子的原因。另一個(gè)例子,bool類型也是無序的,我們并不能說true比false大。
撲克牌集合是部分有序的,也就是說我們有時(shí)可以對牌進(jìn)行比較,而有時(shí)卻不能。比如,我們知道梅花3比梅花2大,因?yàn)?比2大;方塊3比梅花3大,因?yàn)榉綁K比梅花大。但是,梅花3和方塊2誰大呢?一個(gè)數(shù)值更大,而另一個(gè)花色更大。
為了讓卡牌稱為可比較的,我們需要決定大小和花色哪個(gè)更為重要。老實(shí)說,選擇完全是隨意的。 為了選擇,我可以說花色更重要,因?yàn)樾沦I的牌是有序的,所有的梅花放在一起,而且都在方塊的前面,諸如此類。
根據(jù)這個(gè)決策,我們就可以編寫isGreater函數(shù)了。再一次,參數(shù)(兩張牌)和返回類型(布爾值)是顯而易見的,我們還是要在將isGreater設(shè)計(jì)為成員函數(shù)或非成員函數(shù)之間做出選擇。這一次,參數(shù)不是對稱的了。我們到底想知道“A是否大于B”或“B是否大于A”是很重要的。所以我認(rèn)為把isGreater設(shè)計(jì)為成員函數(shù)更有意義。
bool Card::isGreater (const Card& c2) const
{
// 首先檢查花色
if (suit > c2.suit) return true;
if (suit < c2.suit) return false;
// 如果花色相等,檢查大小
if (rank > c2.rank) return true;
if (rank < c2.rank) return false;
// 如果大小也相同,返回false
return false;
}
調(diào)用時(shí),根據(jù)兩個(gè)可能的問題,語法也很明顯:
Card card1 (2, 11);
Card card2 (1, 11);
if (card1.isGreater (card2)) {
card1.print ();
cout << "is greater than" << endl;
card2.print ();
}
你幾乎可以用英語讀出來:”If card1 isGreater card2 ...“。程序的輸出是:
Jack of Hearts
is greater than
Jack of Diamonds
根據(jù)isGreater函數(shù),牌A小于牌2。 作為聯(lián)系,請修改isGreater函數(shù),使A比K大,因?yàn)榇蠖鄶?shù)紙牌游戲中都是這樣的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: