记录学习日常 代码可能有错 大家多多包涵 有好的建议提出的话 我会开心接纳 初学阶段
某自助餐厅提供A、B、C三种套餐服务,原价分别为100元,120元和150元。对于不同顾客有不同的优惠规则如下:
(A)成年男顾客,所有套餐均不打折,此外收取套餐原价15%的服务费;
(B)成年女顾客,所有套餐打9折,此外收取套餐原价15%的服务费;
(C)老年人顾客,所有套餐打8.5折,此外收取套餐原价10%的服务费;
(D)未成年人顾客,所有套餐打7折,不收取服务费。
根据以上需求,定义一个抽象的顾客类Customer,该类有一个数据成员:gender(string类型),用于描述顾客的性别。该类还有一个纯虚函数calculateCost(计算用餐费用函数),用于根据顾客选择的套餐,计算其应该支付的用餐费用并返回。
请根据以上描述完成下面的任务:
(1)请完成Customer类的定义,定义你认为必要的任何成员函数;
(2)请为Customer类定义三个公有派生类:AdultCustomer(成年顾客)、ElderlyCustomer(老年人顾客)和UnderAgeCustomer(未成年人顾客),在这三个类中根据上述规则分别实现纯虚函数calculateCost;
(3)在主函数中定义Customer类的指针并分别指向不同的派生类对象,调用calculateCost函数计算用餐费用并输出。
提示:
(1)calculateCost函数的原型可以定义为 double calculateCost(char set);根据参数set判断用户选择的套餐。
(2)Customer类的gender成员可定义为protected权限也可以定义为private权限。
(3)gender成员的初始化可以由基类的构造函数来完成,也可由派生类的构造函数来完成。如果由基类构造函数完成,派生类构造函数要为基类构造函数传递参数。
main函数已经完成,请根据main函数完成类的设计:
int main(){
AdultCustomer c1("male");
AdultCustomer c2("female");
ElderlyCustomer c3("male");
UnderAgeCustomer c4("female");
Customer *p;
char set1,set2,set3,set4;
cin>>set1>>set2>>set3>>set4;
p=&c1;
cout<<p->calculateCost(set1)<<endl;
p=&c2;
cout<<p->calculateCost(set2)<<endl;
p=&c3;
cout<<p->calculateCost(set3)<<endl;
p=&c4;
cout<<p->calculateCost(set4)<<endl;
return 0;
}
输入描述main函数直接创建了四个对象,因此只需要输入四个顾客选择的套餐即可
输出描述输出四个顾客的餐费,一行一个
样例输入输出:
A B A C
115
126
95
105
#include<iostream>
using namespace std;
class Customer {
public:
virtual double calculateCost(char set) const = 0;//纯虚函数
};
class AdultCustomer : public Customer {
string gender;
public:
AdultCustomer()=default;
AdultCustomer(string g):gender(g) {}
double calculateCost(char set) const {
double expense = 0;//用于存储费用
if (gender == "male") {
if (set == 'A') {
expense = 100 + 100 * 0.15;
} else if (set == 'B') {
expense = 120 + 120 * 0.15;
} else {
expense = 150 + 150 * 0.15;
}
} else if (gender == "female") {
if (set == 'A') {
expense = 100 * 0.9 + 100 * 0.15;
} else if (set == 'B') {
expense = 120 * 0.9 + 120 * 0.15;
} else {
expense = 150 * 0.9 + 150 * 0.15;
}
}
return expense;
}
};
class ElderlyCustomer : public Customer {
string gender;
public:
ElderlyCustomer()=default;
ElderlyCustomer(string g):gender(g) {}
double calculateCost(char set) const {
double expense = 0;
if (set == 'A') {
expense = 100 * 0.85 + 100 * 0.1;
} else if (set == 'B') {
expense = 120 * 0.85 + 120 * 0.1;
} else {
expense = 150 * 0.85 + 150 * 0.1;
}
return expense;
}
};
class UnderAgeCustomer : public Customer {
string gender;
public:
UnderAgeCustomer()=default;
UnderAgeCustomer(string g):gender(g) {}
double calculateCost(char set) const {
double expense = 0;
if (set == 'A') {
expense = 100 * 0.7;
} else if (set == 'B') {
expense = 120 * 0.7;
} else {
expense = 150 * 0.7;
}
return expense;
}
};