#include<bits/stdc++.h>
using namespace std;
class Customer {
protected:
string gender;
public:
virtual double calculateCost() = 0;
};
class AdultCustomer:public Customer {
public:
AdultCustomer(string s) {
this->gender = s;
}
double calculateCost(char set) {
double sum = 0;
if (gender == "male") {
switch (set) {
case 'A':sum = 100 + 15; break;
case 'B':sum = 120 + 120 * 0.15; break;
case 'C':sum = 150 + 150 * 0.15; break;
}
}
else {
switch (set) {
case 'A':sum = 100*0.9 + 15; break;
case 'B':sum = 120*0.9 + 120 * 0.15; break;
case 'C':sum = 150*0.9 + 150 * 0.15; break;
}
}
return sum;
}
};
class ElderlyCustomer :public Customer {
public:
ElderlyCustomer(string s) {
this->gender = s;
}
double calculateCost(char set) {
double sum = 0;
switch (set) {
case 'A':sum = 100 * 0.85 + 100 * 0.1;
case 'B':sum = 120 * 0.85 + 120 * 0.1;
case 'C':sum = 150 * 0.85 + 150 * 0.1;
}
return sum;
}
};
class UnderAgeCustomer :public Customer {
public:
UnderAgeCustomer(string s) {
this->gender = s;
}
double calculateCost(char set) {
double sum = 0;
switch (set) {
case 'A':sum = 100 * 0.7;
case 'B':sum = 120 * 0.7;
case 'C':sum = 150 * 0.7;
}
return sum;
}
};
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;
}
为什么创建的类vs显示的为基类而不是派生类?
Customer类中声明的虚函数是double calculateCost(),但是子类中没有实现这个函数,而是重写了一个double calculateCost(char) 函数,要么把Customer类中的虚函数加上参数类型char,要么就在子类中实现以下这个无参虚函数。
Customer类修改如下:
class Customer {
protected:
string gender;
public:
virtual double calculateCost(char ) = 0;
};
好像是你的纯虚函数参数不一致吧,父类的纯虚函数和子类的参数需要一致才行,不然就被认为是重载了
我懂了,原来是纯虚函数头部在派生类里面不一样,与基类的
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
父类和子类的参数不一致
子类中的纯虚函数没有实现