Circle类和Square类继承于Land类,分别代表圆的地和方的地,其投资收入根据单位面积价格(price)和地的面积(根据边长或半径算出)决定。
Accountant类用于计算Feng Gor开发各种房地产带来的收入。其中DevelopEstate函数接收一个Land的指针,计算并累加开发这块房地产带来的收入(这里用到了动态绑定哦)。CheckMoney函数返回当前的收入。
`#include
class Land{
public:
virtual double landprice()=0;
};
class Circle:public Land{
private:
double radius,price1;
public:
Circle(double radius_,double price1_):radius(radius_),price1(price1_){}
double landprice ()override{
double reward1=0;
double area1=0;
area1=radius*radius*acos(-1);
reward1=area1*price1;
return reward1;
}
};
class Square:public Land{
private:
double length,price2;
public:
Square(double length_,double price2_):length(length_),price2(price2_){}
double landprice ()override{
double reward2=0;
double area2=0;
area2=length*length*acos(-1);
reward2=area2*price2;
return reward2;
}
};
class Accountant{
private:
Land* land;
double reward;
public:
Accountant(){
reward=0;
}
void DevelopEstate(Land* land1){
reward+=land1->landprice();
}
double CheckMoney(){
DevelopEstate(land);
return reward;
}
};
#include
#include
#include "source.h"
using namespace std;
int main(int argc, const char *argv[]) {
Accountant py;
double r,len;
int price1,price2;
cin>>r>>price1>>len>>price2;
Circle *a = new Circle(r, price1); //第一个参数为半径,第二个参数为单位面积价格
Square *b = new Square(len, price2); //第一个参数为边长,第二个参数为单位面积价格
py.DevelopEstate(a);
cout << setprecision(10) << py.CheckMoney() << endl;
py.DevelopEstate(b);
cout << setprecision(10) << py.CheckMoney() << endl;
return 0;
}
Accountant的实例py中的属性 land指针,你在哪里赋值的啊?你都没赋值啊,py.CheckMoney()肯定就崩溃了啊
Accountant类改一下:
class Accountant{
private:
Land* land;
double reward;
public:
Accountant(){
reward=0;
}
void DevelopEstate(Land* land1){
land = land1;
}
double CheckMoney(){
reward+=land1->landprice();
return reward;
}