参考答案:
详细解析:
()(共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;
参考答案:
详细解析: