



uj5u.com熱心網友回復:
第一個是題目選項寫錯了吧...第二個 b 是static 的,所有物件共用,XB(3) 那個是臨時物件,在運算式計算出結果后執行了析構,所以在給 d 復制的時候執行了一次構造,b = 1,計算的時候構造和析構抵消,最后結果等于 2 + 3 + 1 = 6
第三個 注意 speak 函式的引數不是參考,這里會執行默認拷貝構造,所以在 Speak 函式里面,等于是操作一個區域的 Animal 物件
uj5u.com熱心網友回復:
第二題是構造了兩次,析構了一次是吧,所以b最后是1。而題中決議說“b最終為2"是錯的吧。向XB(3)這樣定義物件時不寫物件名只寫引數的形式叫臨時物件,學到了,學到了。uj5u.com熱心網友回復:
這么說第三題里呼叫Speak 是把派生類的物件強制轉換為基類的了?而呼叫Type 是由于是地址傳參所以沒有強制轉換?
uj5u.com熱心網友回復:
第一題d選項如果括號里有兩個引數是不是就成立了?
uj5u.com熱心網友回復:
是的。題目多載的+、-、* 是單目運算子(正號、負號、地址訪問運算子),所以只要一個引數;/ 是雙目運算子。
uj5u.com熱心網友回復:
這里你不能說是強轉,就算將子類物件強轉為基類物件指標或者物件的參考,如果多載了基類的方法,通過這個指標或者參考進行函式呼叫,依然是呼叫的子類的函式。這里函式內操作的Animal物件已經與外界無關了其實。
除法運算子那個,#5 樓說的對,+、-、* 并不是加減乘符號,但是 / 只有除法,要做友元函式的話,必須要兩個引數。
uj5u.com熱心網友回復:
第一個是題目選項寫錯了吧...
第二個 b 是static 的,所有物件共用,XB(3) 那個是臨時物件,在運算式計算出結果后執行了析構,所以在給 d 復制的時候執行了一次構造,b = 1,計算的時候構造和析構抵消,最后結果等于 2 + 3 + 1 = 6
第三個 注意 speak 函式的引數不是參考,這里會執行默認拷貝構造,所以在 Speak 函式里面,等于是操作一個區域的 Animal 物件
這么說第三題里呼叫Speak 是把派生類的物件強制轉換為基類的了?而呼叫Type 是由于是地址傳參所以沒有強制轉換?
這里你不能說是強轉,就算將子類物件強轉為基類物件指標或者物件的參考,如果多載了基類的方法,通過這個指標或者參考進行函式呼叫,依然是呼叫的子類的函式。這里函式內操作的Animal物件已經與外界無關了其實。
除法運算子那個,#5 樓說的對,+、-、* 并不是加減乘符號,但是 / 只有除法,要做友元函式的話,必須要兩個引數。
是的,我的意思就是如果d選項有兩個引數的話,這道題選d就成立了
uj5u.com熱心網友回復:
我明白了,第一題前三個選項有兩個理解:一個是正負號、地址訪問運算子多載為非成員,一個是加減乘多載為成員(由于第一個運算元是呼叫它的物件,多載為成員函式時引數減一),而d選項只有一個理解:除號多載為成員函式。故選d。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/269658.html
標籤:C++ 語言
