刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

第六题

 

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


 图6-1 类图

问题:6.1   【C++代码】
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)


解析:

本题考察的是访问者模式的应用。访问者模式是一种行为设计模式,它允许你在不改变对象结构的情况下增加新的操作。在这个超市销售系统中,我们需要对不同的商品(Item)进行结账操作,这就是一个典型的访问者模式的应用场景。

(1)在Book类中,由于Book是Item类的派生类,所以应该声明为public并继承自Item类。

(2)在Book类的构造函数中,使用"this->price = price;"来初始化成员变量price。

(3)在Book类的accept方法中,接受一个Visitor类型的指针visitor,并调用其visit方法,即"visitor->visit(this);"。

(4)Cashier类应该有一个visit方法来访问Book类型的对象,所以应该声明为public Visitor。并且,Cashier类需要访问其他类型的物品,因此也应该包含相应的visit方法。

(5)在Cashier类的visit方法中,接受一个Book类型的指针book,并对book进行价格访问和累加操作。如果价格低于10元则直接累加,否则打8折后累加。

(6)在ShoppingCart类的calculatePrice方法中,创建一个Cashier对象visitor,遍历购物车中的每个物品(Item),调用每个物品的accept方法接受visitor的访问,即"items[i]->accept(visitor);"。最后通过visitor的getTotal方法获取总价并返回。

创作类型:
原创

本文链接:第六题   阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明 】以下C

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share