【简答题】
试题五(共15分)
阅读下列说明、图和C++代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
[说明]
已知四个类之间的关系如图5-1所示,分别对每个类的方法进行编号,例如Shape的perimeter()方法为1号,表示为“1:perimeter()”,Rectangle类的perimeter()为2号,表示为“2:perimeter()”,依此类推,其中,每个类的perimeter方法都为虚函数且方法签名相同。
[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] 写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请填写“无”)。
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;
参考答案
[问题1] ① ⑤
[问题2] (1)3 (2)5 (3)无 (4)4 (5)无 (6)5
[问题3] ② ⑤