1. (20分) C+±4-1-根据给出的基类编程
题目描述
给出下面的基类:
class AreaC1{
public:
AreaC1(double h, double w) {
height = h; width = w;
}
double area(){ return 0; }
protected:
double height;
double width;
};
创建AreaC1的两个公有派生类矩形类和三角形类,每个派生类中都包含一个函数area() ,分别求矩形和三角形的面积,其中基类中的width表示三角形的底。
主函数中分别定义一个矩形类和三角形类的对象,其height和width均由键盘输入。输出各对象的面积。
输入描述
从键盘输入height和width
输出描述
两行:矩形的面积和三角形的面积
输入样例
10 5
输出样例
矩形的面积:50
三角形的面积:25(中文冒号)
用户代码
#include <iostream>
using namespace std;
class B{
public:
B(double h, double w) {
height = h; width = w;
}
double area(){ return 0; }
protected:
double height;
double width;
};
class Rec:public B
{
public:
Rec(double a,double b):B(a,b)
{
}
double area()
{
return height*width;
}
};
class Str:public B
{
public:
Str(double a,double b):B(a,b)
{
}
double area()
{
return height*width*1.0/2;
}
};
int main()
{
double wight,high;
cin>>wight>>high;
Rec G(wight,high);
cout<<"矩形的面积:"<<G.area()<<endl;
Str A(wight,high);
cout<<"三角形的面积:"<<A.area()<<endl;
return 0;
}
2. (40分) C+±4-2-继承与派生 银行存款类
题目描述
定义银行账户类Account,数据成员包括:账号(unsigned型)、姓名(string类型)、余额(float型),有成员函数:deposit(存款)、withdraw(取款,在Account类中什么都不干)、getBalance(获取账户中的余额)、getAccNo(获取银行账号)、显示函数(显示银行账户中全部信息)、构造函数。
定义银行存款类Savings(储蓄类)和Checking(结算类),均由银行账户类公有派生。Savings类中重新定义withdraw函数(判断账户余额是否大于取款数额,若大于,则余额中减去取款数,否则,提示余额不足)。Checking类中重新定义withdraw函数(在结算账户类中,假定账户取款采用邮汇方式,每汇出一笔款项,不论汇出数额大小,一律收30元手续费,同样需要判断余额是否不足,不足则提示。)
主函数中,定义一个Savings类对象,初始值由键盘输入,(1)显示账户信息;(2)从键盘输入取款数额,取款后再显示账户信息;(3)从键盘输入存款信息,存款后再显示账户信息;(4) 从键盘再输入取款数额,取款后再显示账户信息;
定义一个Checking类对象,初始值由键盘输入,(1)显示账户信息;(2)两次汇款:从键盘输入汇款数额,每次汇款后都显示账户信息。
输入描述
7行数据
Savings类对象的账号 姓名 余额
取款数据
存款数据
取款数据
Checking类对象的账号 姓名 余额
第一次汇款数据
第二次汇款数据
输出描述
对于每个对象,先显示对象的全部数据信息,每进行一次存取款操作,都显示相应信息
输入样例
1001 赵云 6000
4500
6700
10000
2001 何太冲 10000
11000
9000
输出样例
账号:1001 姓名:赵云 余额:6000元(中文冒号)
您本次取款:4500元
账号:1001 姓名:赵云 余额:1500元
您本次存款:6700元
账号:1001 姓名:赵云 余额:8200元
您本次取款:10000元
余额为:8200元,您的账户余额不足!
账号:1001 姓名:赵云 余额:8200元
账号:2001 姓名:何太冲 余额:10000元
您本次汇款11000元 手续费:30元
账户余额不足,账户余额:10000元 取款数额:11000元
账号:2001 姓名:何太冲 余额:10000元
您本次汇款9000元 手续费:30元
账号:2001 姓名:何太冲 余额:970元
用户代码
#include <iostream>
#include <string>
using namespace std;
class CAccount
{
public:
void deposit(int c) //(存款)、
{
m_remain+=c;
}
void withdraw(); //(取款,在Account类中什么都不干)、
int getBalance() {return m_remain;} //(获取账户中的余额)、
unsigned getAccNo(){return m_account;} //(获取银行账号)、
void show() //显示函数(显示银行账户中全部信息)、
{
cout<<"账号:"<<m_account<<" 姓名:"<<m_name<<" 余额:"<<m_remain<<"元"<<endl;
}
CAccount(unsigned a,string b,float c):m_account(a),m_name(b),m_remain(c){ } //构造函数。
private:
unsigned m_account;
string m_name;
protected:
float m_remain;
};
class ASavings:public CAccount
{
//Savings类中重新定义withdraw函数
//(判断账户余额是否大于取款数额,
//若大于,则余额中减去取款数,否则,提示余额不足)。
public:
void withdraw(int m_qukuai)
{
if(getBalance()>= m_qukuai)
m_remain -= m_qukuai;
else
cout<<"余额为:"<<m_remain<<"元,您的账户余额不足!"<<endl;
}
ASavings(unsigned a,string b,float c):CAccount(a,b,c){}
};
// 定义银行存款类Savings(储蓄类)和Checking(结算类),
//均由银行账户类公有派生
//hecking类中重新定义withdraw函数(在结算账户类中,假定账户取款采用邮汇方式,
//每汇出一笔款项,不论汇出数额大小,一律收30元手续费,
//同样需要判断余额是否不足,不足则提示。
class CChecking:public CAccount
{
public:
void withdraw(int m_huikuai)
{
if(getBalance()>= m_huikuai+30)
m_remain -= (30+m_huikuai);
else
cout<<"账户余额不足,账户余额:"<<m_remain<<"元 取款数额:"<<m_huikuai<<"元"<<endl;
}
CChecking(unsigned a,string b,float c):CAccount(a,b,c){}
};
int main()
{
unsigned a;string b;float c;
cin>>a>>b>>c;
ASavings A(a,b,c);
int qu;
cin>>qu;
int chu;
cin>>chu;
int qu2;
cin>>qu2;
int hui;
cin>>a>>b>>c;
CChecking B(a,b,c);
cin>>hui;
int hui2;
cin>>hui2;
A.show();
cout<<"您本次取款:"<<qu<<"元"<<endl;
A.withdraw(qu);
A.show();
cout<<"您本次存款:"<<chu<<"元"<<endl;
A.deposit(chu);
A.show();
cout<<"您本次取款:"<<qu2<<"元"<<endl;
A.withdraw(qu2);
A.show();
cout<<endl;
B.show();
cout<<"您本次汇款"<<hui<<"元 手续费:30元"<<endl;
B.withdraw(hui);
B.show();
cout<<"您本次汇款"<<hui2<<"元 手续费:30元"<<endl;
B.withdraw(hui2);
B.show();
getchar();
getchar();
return 0;
}
3. (40分) C+±4-3-继承与派生 Person及其子类
题目描述
定义一个人员类Person,数据成员包括编号、姓名、性别、家庭住址、联系电话。性别用char型实现,’f’表示女性,’m’表示男性,其它用string类型。成员函数包括:(1)设置编号;(2)设置姓名;(3)设置性别;(4)设置家庭住址;(5)设置联系电话;(6)构造函数;(7)输出一个人员的全部描述信息。
定义一个描述学生的类Student,为Person类公有派生而来。新增的数据成员包括数学、物理、英语、程序设计四门课成绩,各门课成绩为整型。注意继承来的编号成员在此处的意义是学号。新增的成员函数包括:(1)设置数学、物理、外语、程序设计四门课成绩,函数原型为void setScore(char tag, int score);当tag的值分别为’m’、’p’、’e’和’c’时,分别设置数学、物理、英语、程序设计四门课成绩。(2)构造函数;(3)输出一个学生的全部信息,注意在此函数中调用基类中输出人员的全部描述信息的函数。
定义一个描述教师的类Teacher,为Person类公有派生而来。新增的数据成员包括:职称、工资(职称为string类型,工资为double型),注意继承来的编号在此处的意义为工号。新增的成员函数包括:(1)设置职称;(2)设置工资;(3)构造函数;(4)输出一个教师的全部描述信息,注意在此函数中调用基类中输出人员的全部描述信息的函数。
主函数中:(1)定义一个Person类对象,数据成员值由键盘输入,输出对象的全部描述信息;然后设置Person类对象的联系电话,值由键盘输入;输出设置后的全部描述信息。
(2)定义一个Student类对象,数据成员值由键盘输入,输出对象的全部描述信息;然后设置Student类对象的相应课程成绩,课程标识和成绩由键盘输入;输出设置后的全部描述信息。
(3)定义一个Teacher类对象,数据成员值由键盘输入,输出对象的全部描述信息;然后设置Teacher类对象的工资,工资值由键盘输入;输出设置后的全部描述信息。
输入描述
6行数据
Person对象的信息
修改的电话号码
Student对象的信息
修改的课程标识和成绩
Teacher对象的信息
修改的工资
输出描述
各对象的初始全部信息
修改后的对象全部信息
输入样例
1001 刘玄德 m 四川成都 123456789
987654321
201620011001 张春华 f 江苏南京 987654321 87 90 85 88
c 90
3025123 马龙 m 浙江温州 987654321 副教授 3500
4000
输出样例
编 号:1001
姓 名:刘玄德
性 别:m
家庭住址:四川成都
联系电话:123456789
编 号:1001
姓 名:刘玄德
性 别:m
家庭住址:四川成都
联系电话:987654321
编 号:201620011001
姓 名:张春华
性 别:f
家庭住址:江苏南京
联系电话:987654321
数 学:87
物 理:90
英 语:85
程序设计:88
编 号:201620011001
姓 名:张春华
性 别:f
家庭住址:江苏南京
联系电话:987654321
数 学:87
物 理:90
英 语:85
程序设计:90
编 号:3025123
姓 名:马龙
性 别:m
家庭住址:浙江温州
联系电话:987654321
职 称:副教授
工 资:3500
编 号:3025123
姓 名:马龙
性 别:m
家庭住址:浙江温州
联系电话:987654321
职 称:副教授
工 资:4000
用户代码
#include <iostream>
#include <string>
using namespace std;
class CPerson
{
public:
void set_num(string a){ m_num=a; }
void set_name(string a){ m_name=a ;}
void set_sex(char c){m_sex=c; }
void set_where(string a){ m_where= a;}
void set_phone(string a){m_phone=a; }
CPerson( string a,string b,char c,string d,string e ){
m_num=a;
m_name =b;
m_sex=c;
m_where=d;
m_phone=e;
};
void show()
{
cout<<"编 号:"<<m_num<<endl;
cout<<"姓 名:"<<m_name<<endl;
cout<<"性 别:"<<m_sex<<endl;
cout<<"家庭住址:"<<m_where<<endl;
cout<<"联系电话:"<<m_phone<<endl;
}
private:
string m_num,m_name;
char m_sex;
string m_where;
string m_phone;
};
class CStudent:public CPerson
{
public:
void setScore(char c,int a)
{
if(c=='m')
m_math=a;
else if(c=='p')
m_phy=a;
else if(c=='e')
m_eng=a;
else if(c=='c')
m_c=a;
}
CStudent(string a,string b,char c,string d,string e,int g1,int g2,int g3,int g4):CPerson(a,b,c,d,e)
{
m_math=g1;
m_phy=g2;
m_eng=g3;
m_c=g4;
}
void show()
{
CPerson::show();
cout<<"数 学:"<<m_math<<endl;
cout<<"物 理:"<<m_phy<<endl;
cout<<"英 语:"<<m_eng<<endl;
cout<<"程序设计:"<<m_c<<endl;
}
private:
int m_math,m_phy,m_eng,m_c;
};
class CTeacher:public CPerson
{
public:
void set(double a)
{
m_salary=a;
}
CTeacher(string a,string b,char c,string d,string e,string g1,double s):CPerson(a,b,c,d,e)
{
m_position=g1;
m_salary=s;
}
void show()
{
CPerson::show();
cout<<"职 称:"<<m_position<<endl;
cout<<"工 资:"<<m_salary<<endl;
}
private:
string m_position;
double m_salary;
};
int main()
{
string a;
string b,d, e;int g1,g2, g3, g4;
char c;
cin>>a>>b>>c>>d>>e;
CPerson A(a,b,c,d,e);
A.show();
cout<<endl;
cin>>e;
A.set_phone(e);
A.show();
cout<<endl;
cin>>a>>b>>c>>d>>e>>g1>>g2>>g3>>g4;
CStudent B(a,b,c,d,e,g1,g2,g3,g4);
B.show();
cout<<endl;
{
char c;
int a;
cin>>c>>a;
B.setScore(c,a);
B.show();
cout<<endl;
}
{
string f;
double g;
cin>>a>>b>>c>>d>>e>>f>>g;
CTeacher C(a,b,c,d,e,f,g);
C.show();
cout<<endl;
cin>>g;
C.set(g);
C.show();
}
return 0;
}