#include <iostream>
#include <vector>
using namespace std;
class Company
{
protected:
double revenue;
public:
Company(double rev) : revenue(rev) {}
virtual double calculateTax() = 0;
virtual ~Company() {}
};
class Service : public Company
{
public:
Service(double rev) : Company(rev) {}
double calculateTax() override
{
return 0.05 * revenue;
}
};
class Manufacturer : public Company
{
public:
Manufacturer(double rev) : Company(rev) {}
double calculateTax() override
{
return 0.17 * revenue;
}
};
int main()
{
vector<Company*> companies;
char companyType;
double income;
double totalTax = 0;
while (cin >> companyType >> income)
{
switch (companyType)
{
case 'S':
companies.push_back(new Service(income));
break;
case 'M':
companies.push_back(new Manufacturer(income));
break;
}
}
for (Company* company : companies)
{
totalTax += company->calculateTax();
}
cout << totalTax << endl;
for (Company* company : companies)
{
delete company;
}
return 0;
}
作者: Turbo时间限制: 1S章节: 多态
问题描述 :
有两类企业:服务性企业及制造业企业。服务性企业按营业收入的5%征税,制造业企业按营业收入的17%征税。
现需编写程序,输入多个企业的类别及营业收入,计算并输出税收总额。
本题使用多态的特性完成,需要定义三个类:
Company类:基类
Service类:服务性企业类,由Company类派生
Manufacturer类:制造业企业类,由Company类派生
请完成以上三个类的代码,使得程序能按范例输入、输出。
输入说明 :
可输入多组数据,每组占一行。
每一行包含两部分,
第一部分为一个字母S或M,输入S表示服务性企业,输入M表示制造业企业。
第二部分为一个整数,表示企业的营业收入。
输出说明 :
输出一个数字,表示企业的税收总额。