贵州大学oj C++ 第五次 12.房产税费计算

​记录学习

定义一个抽象的房产类HouseProperty,该类有两个数据成员:area(double型,用于描述房产的面积)和unitPrice(double型,用于描述房产的每平方米单价)。该类还有一个纯虚函数taxCalculation(税费计算函数),用于计算不同房产的税费。

假设税费计算的规则如下:

(A)住宅,90平米(含)以下的,税费为房产总价的1.5%,90平米以上的,税费为房产总价的2.0%;

(B)别墅,无论面积大小,税费为房产总价的5%加上单独的10万元消费税;

(C)商铺,30平米(含)以下税费为房产总价的3%,30平米至100平米(含)的税费为房产总价的4%,100平米以上的税费为房产总价的5%。

请根据以上描述完成下面的任务:

(1)请完成HouseProperty类的定义,定义你认为必要的任何成员函数;

    (2)请为HouseProperty类定义公有派生类Residence(住宅)和Shop(商铺),在这两个类中根据上述规则实现纯虚函数taxCalculation;

(3)请为Residence类定义公有派生类Villa(别墅),在这个类中根据上述规则覆盖taxCalculation函数;

(4)在主函数中定义HouseProperty的指针并分别指向不同的派生类对象,调用taxCalculation计算不同房产的税费并输出。

提示:

(1)taxCalculation函数的原型可以定义为 double taxCalculation( );

(2)HouseProperty类的area成员和unitPrice成员可定义为protected权限也可以定义为private权限;

(3)数据成员的初始化可以由基类的构造函数来完成,也可由派生类的构造函数来完成。如果由基类构造函数完成,派生类构造函数要为基类构造函数传递参数。

main函数的内容如下:

int main(){

double area;          

double unitPrice; 

cin>>area>>unitPrice;

Residence h1(area,unitPrice);    

cin>>area>>unitPrice;         

Shop h2(area,unitPrice);

cin>>area>>unitPrice; 

Villa h3(area,unitPrice);

HouseProperty *p;

p=&h1;

cout<<p->taxCalculation()<<endl;

p=&h2;

cout<<p->taxCalculation()<<endl;

p=&h3;

cout<<p->taxCalculation()<<endl;

return 0;

}

样例输入输出:

100 9300
50 23000
300 21000


 

18600
46000
415000

#include<iostream>

using namespace std;

class HouseProperty {
    double area;
    double unitPrice;
public:
    virtual double taxCalculation() = 0;//纯虚函数
};

class Residence : public HouseProperty {
    double area;
    double unitPrice;
public:
    Residence() = default;

    Residence(double a, double u) : area(a), unitPrice(u) {}

    double taxCalculation() {
        double expense = 0;//用于存储费用
        if (area <= 90) {
            expense = 0.015 * unitPrice * area;
        } else if (area > 90) {
            expense = 0.02 * unitPrice * area;
        }
        return expense;
    }
};

class Villa : public Residence {
    double area;
    double unitPrice;
public:
    Villa() = default;

    Villa(double a, double u) : area(a), unitPrice(u) {}

    double taxCalculation() {
        double expense = 0;//用于存储费用
        expense = (0.05 * area * unitPrice) + 100000;
        return expense;
    }
};

class Shop : public HouseProperty {
    double area;
    double unitPrice;
public:
    Shop() = default;

    Shop(double a, double u) : area(a), unitPrice(u) {}

    double taxCalculation() {
        double expense = 0;//用于存储费用
        if (area <= 30) {
            expense = 0.03 * unitPrice * area;
        } else if (area > 30 && area <= 100) {
            expense = 0.04 * unitPrice * area;
        } else if (area > 100) {
            expense = 0.05 * unitPrice * area;
        }
        return expense;
    }
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值