C++ equals函數(shù)

2023-03-20 16:23 更新

兩張牌要相等的話,必須花色和大小都相同。十分不幸,“==”操作符不能用于像Card這種用戶定義類型,所以我們需要自己編寫一個比較兩張牌的函數(shù),即equals函數(shù)。也可以通過重寫“==”操作符的定義實現(xiàn)此功能,不過本書不做介紹了。

很明確,equals函數(shù)的返回值應該是布爾類型,用以說明兩張牌是否相等。同樣可以明確的是,該函數(shù)需要有兩個Card類型的參數(shù)。但是我們還要做出一個選擇,那就是應該把equals設計成成員函數(shù)還是獨立函數(shù)?

將equals設計為成員函數(shù),代碼如下:

bool Card::equals (const Card& c2) const
{
  return (rank == c2.rank && suit == c2.suit);
}

使用這個函數(shù)時,必須通過一個對象來調用,而把另一個對象當做參數(shù):

Card card1 (1, 11);
Card card2 (1, 11);

if (card1.equals(card2)) {
  cout << "Yup, that’s the same card." << endl;
}

在我看來,像equals這樣兩個參數(shù)對稱的函數(shù),這樣調用看起來很奇怪。對稱是指, 以“A是否等于B”或者“B是否等于A”兩種方式提問,其實沒什么關系。既然如此,我想以非成員函數(shù)的方式重寫equals函數(shù)更好:

bool equals (const Card& c1, const Card& c2)
{
  return (c1.rank == c2.rank && c1.suit == c2.suit);
}

調用這個版本的函數(shù)時,參數(shù)并肩出現(xiàn),至少在我看來這樣邏輯上更有意義。

if (equals (card1, card2)) {
  cout << "Yup, that’s the same card." << endl;
}

當然,這就是口味的問題了。我的觀點是,不管成員函數(shù)版本還是非成員函數(shù)版本,讀者都要能熟練編寫,所以能根據(jù)條件選擇最合適的版本。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號