99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

C++ equals函數(shù)

2023-03-20 16:23 更新

兩張牌要相等的話,必須花色和大小都相同。十分不幸,“==”操作符不能用于像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ù)條件選擇最合適的版本。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)