问答题
阅读以下说明和C++代码,将应填入{{U}} (n) {{/U}}处的字句写在答题纸的对应栏内。
{{B}}[{{/B}}说明{{B}}]{{/B}}
已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElement()、 numberOfElement()以及removeLastElement()。四个方法的含义分别为:
void addElement(Object):在列表尾部添加一个对象;
Object lastElement():返回列表尾部对象;
int numberOfElement():返回列表中对象个数;
void removeLastElement():删除列表尾部的对象。
现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。
{{B}}[{{/B}}C++代码1{{B}}]{{/B}}
class Stack :public LinkedList {
public :
void push (Object o) {addElement (o); }; //压栈
Object peek() {return{{U}} (1) {{/U}};}; //获取栈顶元素
bool i sEmpty (){ //判断栈是否为空
return numberOfElement ( ) == 0;
);
Object pop () { //弹栈
Object o = lastElement();
{{U}} (2) {{/U}};
return o;
};
};
{{B}}[{{/B}}C++代码2{{B}}]{{/B}}
class Stack {
private:
{{U}} (3) {{/U}};
public:
void push (Object o) { //压栈
list. addElement (o);
};
Object peek() { //获取栈顶元素
return list.{{U}} (4) {{/U}};
};
bool isEmpty () { //判断栈是否为空
return list. numberOfElement ( ) = = 0;
Object pop() { //弹栈
Object o = list. lastElement ();
list. removeLastElement ( );
return o; };
}
{{B}}[{{/B}}问题{{B}}]{{/B}}
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第 index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?{{U}} (5) {{/U}}(A.继承 B.组合)
【正确答案】
【答案解析】(1)lastElement() (2) removeLastElement() (3) LinkedList list (4) lastElement() (5) A
[解析] 根据代码注释,程序代码中空(1)处用来获取栈顶元素,而父类LinkedList提供的成员函数lastElement()可以实现此功能,因此此处调用该函数即可,所以空(1)处填写lastElement()。空(2)处主要执行“弹栈”操作,根据Object pop()函数的要求,元素弹出栈主要有两个步骤,一是获取栈顶元素,即返回队列尾部对象;二是删除栈顶元素,即删除队列尾部的对象,调用removeLastElement()函数即可实现,所以空(2)处应该填“removeLastElement()“。空(3)处要求定义一个对象,再根据后面程序代码的提示,可以知道该对象名字为list,类型为 LinkedList,所以空(3)处应填”LinkedList list”。空(4)处用于获取栈顶元素,即返回队列尾部的对象,类LinkedList的lastElement()函数即可实现该功能,所以空(4)处应填“lastElement()”。类的继承是指子类的对象拥有对父类的成员和属性进行访问的权限,通过继承可以使用父类提供的removeElement()方法,类的组合描述的是一个类内嵌其他类的对象作为成员的情况,描述的是一种包含和被包含的关系,所以通过组合Stack对象并不能访问LinkedList提供的方法removeElement(int index),所以空(5)应填A。