大梁郡鼓励民众自行开荒种粮,凡开荒户面积达3亩以上者,可得到减税奖励。 荒地信息由农户自行上报,上报时将根据全郡目前的总地块数给所申报的地块进行统一编号。 现有荒地类和农户类部分代码,以及主函数main中的部分代码,详情请参考裁判程序。
请补充类中函数的定义和其他的声明,并将main函数补充完整,使之得到样例的输出结果。
裁判测试程序样例:
#include
#include
using namespace std;
class Field{
private:
int no; //地块编号
float area; //面积
public:
Field(float);//需要补充其定义
float getArea();//需要补充其定义
int getNo(){return no;}
void setNo(int no_){no=no_;} //设置地块编号
};
class Owner{
private:
int id; //农户号
string name; //户主姓名
float area; //目前所拥有的荒地总面积
public:
static float totalArea;//全郡荒地总面积
static int fieldNum; //全郡荒地总块数
void declare(Field f); //申报一块开荒地块
float getArea(){return area;}
Owner(int id_,string name_,float area_=0);
Owner(){
area=0;
name="";
}
};
/* 你编写的代码将被嵌入这里 */
cout<<“total num:”<<Owner::fieldNum<<" total area:"<<fixed<<setprecision(2)<<Owner::totalArea<<endl;
if (o.getArea()>=3){
cout<<“tax cut!”<<endl;
}else
cout<<“no tax cut!”<<endl;
return 0;
}
输入样例:
第1行输入全郡目前的荒地总块数和总面积数, 第2行输入申报人的户号、户主姓名和未申报前的现有荒地面积, 第3行输入的是现申报的荒地总块数,以及每一块的面积
6 31.8
1001 ZhangFei 1.8
2 1.2 1.5
输出样例:
农户每申报一块荒地,将以“XXX declared one field,no:X area:XX”的格式在一行中输出其申报信息, 之后输出全郡的荒地总数和总面积数 最后一行输出该户是否得到减税优惠。
ZhangFei declared one field,no:7 area:1.2
ZhangFei declared one field,no:8 area:1.5
total num:8 total area:34.50
tax cut!
个人理解:题目考的就是类Owner 中 void declare(Field f) 这个成员函数;
因为类Owner 中 成员变量 area 是 private 类型的变量,只能通过类的成员函数改变。除了构造函数能初始化 area 的量,只有void declare(Field f) 这个成员函数,所以申请土地时改变农户申报荒地的面积 area 只有void declare(Field f) 函数了。
代码:
Field::Field(float a){
area=a;
}
float Field::getArea(){
return area;
}
void Owner::declare(Field f){//这个函数的作用:传入Field的对象,通过对象的值来修改Owner里面的值;
this->area+=f.getArea();
f.setNo(++fieldNum);
totalArea+=f.getArea();
cout<<name<<" declared one field,no:"<<f.getNo()<<" area:"<<f.getArea()<<endl;
}
Owner::Owner(int id_,string name_,float area_){
id=id_;
name=name_;
area=area_;
}
float Owner::totalArea=0;
int Owner::fieldNum=0;
int main(){
int id;
string name;
float area,a;
cin>>Owner::fieldNum>>Owner::totalArea;
cin>>id>>name>>area;
Owner o(id,name,area);
int n,i;
cin>>n;
for(i=0;i<n;i++){
cin>>area;
Field f(area);
o.declare(f);
}