第六题 阅读下列说明和C++代码,填补代码中空缺,将解答填入答题纸对应栏内。
【说明 】
以下C++代码实现一个超市简单销售系统中部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中物品统计其价格进行结账,设计如图6-1所示类图。

using namespace std;
class Book;
class Visitor {
public:
virtual void visit(Book* book)=0;
//其它物品visit方法
};
class Item {
public:virtual void accept(Visitor* visitor)=0;
virtual double getPrice()=0;
};
class Book (1){
private: double price;
public:
Book (double price){ //访问本元素
(2);
}
void accept(Visitor* visitor) {
(3);
}
double getPrice() { return price; }
};
class Cashier(4){
private;
double totalForCart;
public:
//访问Book类型对象价格并累加
(5){
//假设Book类型物品价格超过10元打8折
if(book->getPrice()<10.0) {
totalForCart+=book->getPrice();
} else
totalForCart+=book->getPrice()*0.8;
}
//其它visit方法和折扣策略类似,此处略
double getTotal() {
return totalForCart;
}
};
class ShoppingCart {
private:
vector<item*>items;
public:
double calculatePrice() {
Cashier* visitor=new Cashier();
for(int i=0;i <items.size();i++)
(6);
}
double total=visitor->getTotal();
return total;
}
void add(Item*e) {
items.push_back(e);
}
};
正确答案及解析
正确答案
解析
(1):public Item
(2)this->price=price
(3)visitor->visit(this)
(4)public visitor
(5)void visit(Book*book)
(6)item->accept(visitor)
【解析】
这里考察是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素操作,它可以在不改变数据结构前提下定义作用于这些元素新操作。
你可能感兴趣的试题
E-mail地址由分隔符“()”分为前后两部分,分别指明用户名及邮件
- 
                
- A.//
 - B.\\
 - C.@
 
 - 查看答案
 
某 html 文档中有如下代码,则在浏览器中打开该文档时显示为( )。
<form>
Listl:
<input type="text" name="List1" />
<br / >
List2:
<input type="text" name="List 2 " />
< /form>

- 
                
- A.见图A
 - B.见图B
 - C.见图C
 - D.见图D
 
 - 查看答案
 
设有商品关系P(商品名,条形码,供应商号,价格,数量), “条形码”唯一标识关系P中的每一个元组,商品名不能为空,供应商号是关系P的外键。另有供应商关系S(供应商号,供应商名,地址,电话)。关系 P 中的商品名是唯一的。建立商品关系 P 的 SQL语句如下所示:
CREATE TABLE P( 商品名CHAR(30)( ),
条形码CHAR(30) ( ) ,
供应商号 CHAR(5) ,
价格 CHAR(20) ,
数量CHAR(20)
( )(供应商号) REFERENCES S(供应商号));
查询供应商及价格小于等于 2500 元且大于等于 1280 元的“电冰箱”的数量的SQL语句为:
SELECT商品名,供应商名,价格,数量
FROM P
WHERE商品名= ’电冰箱’ AND ( ) ;
将供应商号“12021”所供应的商品价格上涨3%的SQL语句为:
UPDATE P
( )
WHERE 供应商号= ’12021’;
查询供应商地址包含“西安”的供应商名及电话的SQL语句为:
SELECT供应商名,电话
FROM S
WHERE ( );
- 
                
- A.NULL
 - B.UNIQUE
 - C.NOT NULL
 - D.NOT NULL UNIQUE
 
 - 查看答案
 
函数f()、g()的定义如下所示。已知调用f时传递给其形参x的值是1,若以传值方式调用g,则函数f的返回值为( );若以传引用方式调用g,则函数f的返回值为( )。

- 
                
- A.3
 - B.4
 - C.6
 - D.7
 
 - 查看答案
 


- 
                
- A.见图A
 - B.见图B
 - C.见图C
 - D.见图D
 
 - 查看答案