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