對operator 的深入理解

2021-09-03 02:42:27 字數 1642 閱讀 4408

比較了幾種operator+的處理方式,分析其正確和錯誤原因。

比較了operator << 的類內和類外定義兩種方式,分析其原因。

#include

#include

using

namespace std;

class

gameplayer

;gameplayer

(int tp)

;bool

operator

==(gameplayer)

;const gameplayer&

operator

=(gameplayer)

;錯誤;

b = a + c; 編譯通過,結果沒有問題;

b = a + b + c; 編譯不通過,沒有找到接受(或可接受轉換的操作符 + )需要在函式後面加 const,儘管也是錯的;

//const gameplayer& operator+ (const gameplayer& comp)

錯誤,返回臨時變數的位址,不安全;

b = a + c; 編譯通過,結果沒有問題;

b = a + b + c; 編譯通過,b值有問題,為無效值;

//gameplayer& operator+ (const gameplayer& comp)

錯誤,使用this

b = a + c; 編譯通過,a值有問題,為b值;過程為:a = a + c; b = a;

//gameplayer& operator+ (const gameplayer& comp)

正確b + c = a;錯誤做法也判斷為正確,(因為沒有選擇this做法,故)結果正確;過程為:temp = b + c; temp = a;

函式返回值設為 const 型別 可以通過編譯器自動檢查

//gameplayer operator+ (const gameplayer& comp)

//最安全的做法

const gameplayer operator+(

const gameplayer& comp)

const

; ostream&

operator

<<

(ostream& os)

;//友元函式,允許 ostream& operator<< 訪問該類

friend ostream&

operator

<<

(ostream& os,

const gameplayer&);

private

:int numturns;};

bool gameplayer::

operator

==(gameplayer comp)

const gameplayer& gameplayer::

operator

=(gameplayer comp)

//友元函式,允許 ostream& operator<< 訪問該類,過載是通過不同的引數

ostream&

operator

<<

(ostream& os,

const gameplayer& gp)

intmain()

對this 的深入理解

this的取值,分四種情況。我們來挨個看一下。在此再強調一遍乙個非常重要的知識點 在函式中this到底取何值,是在函式真正被呼叫執行的時候確定的,函式定義的時候確定不了。因為this的取值是執行上下文環境的一部分,每次呼叫函式,都會產生乙個新的執行上下文環境。情況1 建構函式 所謂建構函式就是用來n...

對正規化的深入理解

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。正規化說明 1.1 第一...

對指標的深入理解

首先對變數這一詞做乙個本質的介紹。變數的實質就是乙個可操作的空間,且變數的變是體現在該儲存空間中所儲存的位址所對應的值是可變的。比如舉乙個例子來說吧 現在不管開啟任意一款遊戲,而這款遊戲中將會難免產生一些臨時的資料,將會在記憶體中臨時儲存,隨著遊戲的不斷進行,則衡量某一標準的資料隨時會發生改變,因此...