阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账,设计如图6-1所示类图。 【C++代码】 usingnamespacestd;classBook;classVisitor{public:virtualvoidvisit(Book*book)=0;//其它物品visit方法};classItem{public:virtualvoidaccept(Visitor*visitor)=0;virtualdoublegetPrice()=0;};classBook(1){private:doubleprice;public:Book(doubleprice){//访问本元素(2);}voidaccept(Visitor*visitor){(3);}doublegetPrice(){returnprice;}};classCashier(4){private;doubletotalForCart;public://访问Book类型对象的价格并累加(5){//假设Book类型的物品价格超过10元打8折if(book->getPrice()getPrice();}elsetotalForCart+=book->getPrice()*0.8;}//其它visit方法和折扣策略类似,此处略doublegetTotal(){returntotalForCart;}};classShoppingCart{private:vector<item*>items;public:doublecalculatePrice(){Cashier*visitor=newCashier();for(inti=0;i<items.size();i++)(6);}doubletotal=visitor->getTotal();returntotal;}voidadd(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) 【解析】 这里考察的是访问者模式。其定义如下:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作