W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
兩張牌要相等的話,必須花色和大小都相同。十分不幸,“==”操作符不能用于像Card這種用戶定義類型,所以我們需要自己編寫一個(gè)比較兩張牌的函數(shù),即equals函數(shù)。也可以通過重寫“==”操作符的定義實(shí)現(xiàn)此功能,不過本書不做介紹了。
很明確,equals函數(shù)的返回值應(yīng)該是布爾類型,用以說明兩張牌是否相等。同樣可以明確的是,該函數(shù)需要有兩個(gè)Card類型的參數(shù)。但是我們還要做出一個(gè)選擇,那就是應(yīng)該把equals設(shè)計(jì)成成員函數(shù)還是獨(dú)立函數(shù)?
將equals設(shè)計(jì)為成員函數(shù),代碼如下:
bool Card::equals (const Card& c2) const
{
return (rank == c2.rank && suit == c2.suit);
}
使用這個(gè)函數(shù)時(shí),必須通過一個(gè)對(duì)象來調(diào)用,而把另一個(gè)對(duì)象當(dāng)做參數(shù):
Card card1 (1, 11);
Card card2 (1, 11);
if (card1.equals(card2)) {
cout << "Yup, that’s the same card." << endl;
}
在我看來,像equals這樣兩個(gè)參數(shù)對(duì)稱的函數(shù),這樣調(diào)用看起來很奇怪。對(duì)稱是指, 以“A是否等于B”或者“B是否等于A”兩種方式提問,其實(shí)沒什么關(guān)系。既然如此,我想以非成員函數(shù)的方式重寫equals函數(shù)更好:
bool equals (const Card& c1, const Card& c2)
{
return (c1.rank == c2.rank && c1.suit == c2.suit);
}
調(diào)用這個(gè)版本的函數(shù)時(shí),參數(shù)并肩出現(xiàn),至少在我看來這樣邏輯上更有意義。
if (equals (card1, card2)) {
cout << "Yup, that’s the same card." << endl;
}
當(dāng)然,這就是口味的問題了。我的觀點(diǎn)是,不管成員函數(shù)版本還是非成員函數(shù)版本,讀者都要能熟練編寫,所以能根據(jù)條件選擇最合適的版本。
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)系方式:
更多建議: