首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列说明和C++代码,填补代码中的空缺,将解答填入对应栏内。 【说明】 以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进
阅读下列说明和C++代码,填补代码中的空缺,将解答填入对应栏内。 【说明】 以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进
admin
2018-11-21
28
问题
阅读下列说明和C++代码,填补代码中的空缺,将解答填入对应栏内。
【说明】
以下C++代码实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Item)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。设计如图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
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)items.at(i)->accept(visitor)或items
解析
本题考查C++语言程序设计能力,涉及接口、类、对象、函数的定义和使用。要求考生根据给出的案例和代码说明,认真阅读理清程序思路,然后完成题目。题目所给代码清晰,易于理清思路。本题也是典型的访问者(Visitor)设计模式的实现示例。访问者设计模式的典型类图如下所示。该模式中最核心的部分当属Visitor接口,其为元素对象结构中每一种具体元素(ConcreteElement)定义了visit操作。
先考查题目说明,实现一个超市简单销售系统中的部分功能,顾客选择图书等物品(Itern)加入购物车(ShoppingCart),到收银台(Cashier)对每个购物车中的物品统计其价格进行结账。具体物品有图书(Book)、CD和DVD等。
根据题目说明进行设计,给出图6-1的类图,定义相关的接口、类及其之间的关系。其中ShoppingCart购物车中持有各种物品,物品(Item)定义为接口,声明两个纯虚函数,一个是getPrice()可以获得物品价格,另一个accept(visitor:Visitor)接受由visitor对象进行价格统计,方法由子类实现。Book、CD和DVD三个具体类继承Item,需要具体定义getPrice()和accept()函数的实现。Visitor定义为访问每个物品的接口,具体访问者即其实现类Cashier对ShoppingCart中的每个物品进行统计。
元素对象结构中,Item接口定义为C++中的抽象类,函数定义为纯虚函数,通过用virtual关键字修饰方法声明,并在声明中使用’’=0’’来指定,只有函数的声明,没有具体函数实现,即:
public:
virtual void accept(Visitor*viSitor)=0;
virtual double getPrice()=0;
抽象类无法直接创建对象,需要由具体实现类Book、CD和DVD实现Item中的声明的纯虚函数后,才能创建对象。在C++中,采用:加父类名,如下所示:
class Book:public Item{…}
class CD:public Item{…}
class DVD:public Item{…}
在具体实现类的构造器中,对象的属性与构造器参数price同名,用this关键字加以区分。其中this关键字用来指向当前对象或类实例,可以用->取属性或行为,即:
this->price=price;
其中,this->price表示当前对象的price属性,price表示参数。
void accept(Visitor*visitor)函数用于具体的收银员访问本元素以统计价格,即visitor对象使用其visit方法访问当前的物品对象:visitor->visit(this);。
这一类图中的另一个核心是Visitor接口,该接口定义了一个访问Item对象结构中的每种具体物品元素的操作即,仍然采用抽象类定义:class Visitor{},即:
public:
virtual Void visit(Book*book)=0;
virtual Void visit(CD*cd)=O;
virtual Void visit(DVD*dvd)=0;
具体访问物品的收银员Cashier实现该Visitor接口,对其中声明的纯虚函数visit加以实现。Cashier记录(存储)所统计的物品总价格totalForCart,在访问每个物品之后,将按具体规则对物品进行价格统计,累加至总价格。Cashier中定义public:double getTotal()函数以返回购物车中物品的总价格。
ShoppingCart类定义购物车中一系列物品的向量集合:
vector
items;
其中,采用模板元素类型
约束。
ShoppingCart中的calculatePrice()数即为触发结账离开的行为,其中每个物品接受Cashier对象的价格统计:
for(int i=0;i<items.size();i++) {
items
->accept(visitor);//或items.at(i)->accept(visitor)
}
最后通过visitor->getTotal()返回总价格。ShoppingCart中还定义一个方法用来向购物车添加物品:
public void add(Item*e){
items.push_back(e);
}
整个系统的在使用时先创建ShoppingCart对象,向其中添加物品,结账离开时调用calculatePrice()统计总价,在main()函数中定义如下:
int main() {
ShoppingCart* cart = new ShoppingCart();
Book*b=new Book(20);
cart->add(b);
CD*c=new CD(10);
cart->add(c);
double total=cart->calculatePrice();
cout<<’’total: ’’<<total<<endl;
delete cart;
}
综上所述,空(I)需要标识实现接口Item,即用:public Item继承Item类;空(2)要表示将参数price赋值给当前对象的price,即this->price=price;空(3)处需要使visitor对象调用visit当前对象来统计价格,即visitor->visit(this);空(4)为实现接口Visitor,即:public Visitor继承Visitor类;空(5)处为具体类中实现接口中声明的方法voidvisit(Book* book);空(6)处为物品对象接受收银员对当前对象进行统计,items.at(i)->accept(visitor)或items
->accept(visitor)。
转载请注明原文地址:https://jikaoti.com/ti/r8W7FFFM
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
某咨询顾问公司派小强统计本市各品牌汽车的占有率,以下4种统计方法中,小强应采用______方法,使估算结果较为可信。
在Excel2010中,设单元格A1、A2、A3、A4中的值分别为20、3、16、20,若在单元格B1中输入函数“=PR0DUCT(ApA2)/MAX(A3,A4)”,按回车键后,则B1单元格中的值为(
为使双击指定类型的文件名就能调用相应的程序来打开处理它,需要将这种文件类型与相应的程序建立文件(23)。
收集数据时,设计调查的问题很重要。此时,需要注意的原则不包括(8)。
某工厂信息处理技术员设计了如下统计表:该表设计中包含的问题以及改进方法是______。
文件的扩展名可以说明文件类型。下面的“文件类型一扩展名”对应关系错误的是:
()是移动互联网的组成部分。
甲和乙用如下图的两个转盘做游戏,游戏规则如下:分别旋转两个转盘,当两个转盘所转到的数字之积为奇数时,甲得2分;当所转到的数字之积为偶数时,乙得1分,则这游戏规则______。
在Word文档中某一段落的最后一行只有一个字符,若想把该字符合并到上一行,___________不能做到。
请根据网页显示的效果图和网页中的元素说明,将HTML文本中(n)处的解答填入答题纸对应的解答栏内。说明在Ⅲ浏览器中输入常春藤大学招生办公室主页的网址并回车后,网页显示的效果如图5-1所示。HTML文本<html><he
随机试题
回火防止器的作用是____时,防止火焰窜入____或阻止火焰在____的蔓延。
砂炒后便于除去绒毛的是
【2903年第107题】薄板与薄壳结构,其物理力学性能,下列哪种说法是不正确的?
背景资料某光缆线路工程采用直埋敷设方式,途中需穿越生态环境脆弱的国家级生态保护区,部分路段沿电气化铁路敷设。施工单位对施工方案进行了策划,编制了详细的施工组织设计,工程顺利开工。测试中发现部分光缆对地绝缘不合格,且光纤接续衰减过大,不
旅行社业务经营许可证及副本损毁或遗失的,旅行社应当向省级旅游行政管理部门申请换发或者补发。()
旅行社等用人单位应当维护导游执业安全、提供必要的职业安全卫生条件,并为女性导游提供执业便利、实行特殊劳动保护。()
中华人民共和国实行依法治国,建设社会主义()国家。
社会成员的幸福感是可以运用现代手段精确量化的。衡量一项社会改革措施是否成功,要看社会成员的幸福感总量是否增加。S市最近推出的福利改革明显增加了公务员的幸福感总量,因此,这项改革措施是成功的。以下哪项如果为真,最能削弱上述论证?
Whatdothespeakersmainlydiscuss?
Oceanographyhasbeendefinedtheapplicationofall【S1】______sciencestothestudyofthesea.Beforethenine
最新回复
(
0
)