#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显示的为基类而不是派生类?