閱讀下列說(shuō)明、圖和C++代碼,回答問(wèn)題1至問(wèn)題3,將解答寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
已知四個(gè)類(lèi)之間的關(guān)系如圖5-1所示,分別對(duì)每個(gè)類(lèi)的方法進(jìn)行編號(hào),例如Shape的perimeter()方法為1號(hào),表示為“1:perimeter()”,Rectangle類(lèi)的perimeter()為2號(hào),表示為“2:perimeter()”,依此類(lèi)推,其中,每個(gè)類(lèi)的perimeter方法都為虛函數(shù)且方法簽名相同。
【C++代碼】 Triangle *tr = new Triangle();
Square *sq = new Square();
Shape *sh = tr;
【問(wèn)題1】 關(guān)于上述C++代碼中sh 和 tr的以下敘述中,哪兩個(gè)是正確的(寫(xiě)出編號(hào))。
① sh 和 tr分別引用同一個(gè)對(duì)象;
② sh 和 tr分別引用同一類(lèi)型的不同的對(duì)象;
③ sh 和 tr分別引用不同類(lèi)型的不同對(duì)象;
④ sh 和 tr分別引用同一個(gè)對(duì)象的不同拷貝;
⑤ sh 和 tr所引用的內(nèi)存空間是相同的。
【問(wèn)題2】 寫(xiě)出下面消息對(duì)應(yīng)的方法編號(hào)(如果該消息錯(cuò)誤或者沒(méi)有對(duì)應(yīng)的方法調(diào)用,請(qǐng)?zhí)顚?xiě)“無(wú)”)。
tr->height() (1)
sh->perimeter() (2)
sq->height() (3)
sq->perimeter() (4)
sh->height() (5)
tr->perimeter() (6)
【問(wèn)題3】 不考慮內(nèi)存釋放問(wèn)題,下列賦值語(yǔ)句中哪兩個(gè)是合法的(寫(xiě)出合法賦值語(yǔ)句的編號(hào))。
① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;