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