對於cpoint變數一般都是在宣告處定義,
cpoint pcenter(200,200);
今天突然遇到乙個很具有迷惑性的現象:
標頭檔案(.h)中宣告:
cpoint pcenter;
原始檔中(.cpp)定義:
pcenter = (200,200);
然後debug發現,這條語句執行之後,
pcenter.x = 200;
pcenter.y = 0;
其實仔細想來這個bug是我們自己的疏忽造成的,(200,200)本身是乙個逗號表示式,表示式的值是200,而不是我們預期的cpoint(200,200)。
其實對於pcenter = (200,200);這條語句,呼叫了cpoint的如下賦值函式
_afxwin_inline cpoint::cpoint(dword dwpoint)
cpoint並沒有過載=,它是通過建構函式上述
cpoint(dword dwpoint);
來實現的。
系統首先生成乙個臨時物件,使用該建構函式對200(0x000000c8)初始化,得到臨時cpoint(0x000000c8,0x00000000
)。然後使用系統預設的操作符=,將兩個物件進行賦值。最後釋放臨時物件。
賦值與初始化
1 賦值 賦值 是給變數指定乙個值或者是改變乙個變數的值,且 必須是在該變數型別所能表達的範圍之內。int speed 30 標準形式 variable expression 變數型別 變數名 表示式 2 初始化 區域性變數 必須顯示的進行初始化。例項變數 類變數 編譯器可以自動對它們進行初始化。b...
關於初始化和賦值
class test private char ptr pubic 若test test1 hello 則呼叫的是建構函式 若test test2 test1 則呼叫的是拷貝建構函式 若test test2 test1 則呼叫的是拷貝建構函式 若test test2 test2 test1 則呼叫的...
陣列的初始化與賦值
以乙個整型陣列和乙個char型陣列為例 int a 2 char s 5 這樣初始化時可以的,使用cout輸出s陣列的時候,不報錯,但直接使用s這個陣列名輸出缺少了乙個適當的 0 結尾 對比上面的初始化,只能對陣列的元素賦值,而不能用賦值語句對整個陣列賦值 c 程式設計 譚浩強 149頁 例如下面是...