一.根据给出的基类编程
题目描述
给出下面的基类:
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>
#include <cmath>
using namespace std;
class AreaC1{
public:
AreaC1(double h=0, double w=0)
{
height = h;
width = w;
}
double area()
{
return 0;
}
protected:
double height;
double width;
};
class Rectangle : public AreaC1
{
public:
void SetRectangle(double h=0, double w=0)
{
height = h;
width = w;
}
double area()
{
return (height*width);
}
};
class Triangle : public AreaC1
{
public:
void SetTriangle(double h=0, double w=0)
{
height = h;
width = w;
}
double area()
{
return (1.0/2*height*width);
}
};
int main()
{
double h,w;
Rectangle A;
Triangle B;
cin>>h>>w;
A.SetRectangle(h,w);
B.SetTriangle(h,w);
cout<<"矩形的面积:"<<A.area()<<endl;
cout<<"三角形的面积:"<<B.area()<<endl;
return 0;
}
二.继承与派生 银行存款类
题目描述
定义银行账户类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 Account
{
public:
Account(unsigned a = 0, string b = " ", float c = 0)
{
AccNo = a;
Name = b;
Balance = c;
}
void deposit(float n)
{
cout << "您本次存款:" << n <<"元"<< endl;
Balance = Balance + n;
}
void withdraw()
{
;
}
float getBalance()
{
return Balance;
}
unsigned getAccNo()
{
return AccNo;
}
void show()
{
cout <<"账号:"<< AccNo << " " <<"姓名:"<< Name << " " << "余额:" << Balance<<"元"<<endl;
}
protected:
unsigned AccNo;
string Name;
float Balance;
};
class Savings : public Account
{
public:
void SetSavings(unsigned a = 0, string b = " ", float c = 0)
{
AccNo = a;
Name = b;
Balance = c;
}
void withdraw(float m)
{
if (m < getBalance())
{
cout << "您本次取款:" << m << "元"<<endl;
Balance = Balance - m;
}
else
{
cout << "您本次取款:" << m << "元" << endl;
cout << "余额为:" << getBalance() << "元,"<<"您的账户余额不足!" << endl;
}
}
};
class Checking : public Account
{
public:
void SetChecking(unsigned a = 0, string b = " ", float c = 0)
{
AccNo = a;
Name = b;
Balance = c;
}
void withdraw(float m)
{
if ((m+30) < getBalance())
{
cout << "您本次汇款" << m << "元 手续费:30元" << endl;
Balance = Balance - m-30;
}
else
{
cout << "您本次汇款" << m << "元 手续费:30元" << endl;
cout << "账户余额不足,账户余额:" << getBalance() << "元" << " 取款数额:" <<m<<"元"<< endl;
}
}
};
int main()
{
unsigned AccNo1, AccNo2;
string Name1, Name2;
float Balance1, Balance2, n1,n2,n3,n4,n5;
Savings A;
Checking B;
cin >> AccNo1 >> Name1 >> Balance1>>n1>>n2>>n3;
cin >> AccNo2 >> Name2 >> Balance2 >> n4 >> n5;
A.SetSavings(AccNo1, Name1, Balance1);
B.SetChecking(AccNo2, Name2, Balance2);
A.show();
A.withdraw(n1);
A.show();
A.deposit(n2);
A.show();
A.withdraw(n3);
A.show();
cout << "\n";
B.show();
B.withdraw(n4);
B.show();
B.withdraw(n5);
B.show();
return 0;
}
三.继承与派生 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 Person
{
public:
Person(string a=" ", string b = " ", char c = ' ', string d = " ", string e = " ")
{
Num=a;
Name = b;
Sex = c;
Adr = d;
Tel = e;
}
void SetNum(string a)
{
Num = a;
}
void SetName(string a)
{
Name = a;
}
void SetNum(char a)
{
Sex = a;
}
void SetAdr(string a)
{
Adr = a;
}
void SetTel(string a)
{
Tel = a;
}
void output()
{
cout <<"编 号:"<< Num << endl;
cout <<"姓 名:"<< Name << endl;
cout <<"性 别:"<< Sex << endl;
cout << "家庭住址:" << Adr << endl;
cout << "联系电话:" << Tel << endl;
}
protected:
string Num;
string Name;
char Sex;
string Adr;
string Tel;
};
class Student:public Person
{
public:
Student(int a=0,int b = 0,int c = 0,int d = 0)
{
mScore = a;
pScore = b;
eScore = c;
cScore = d;
}
void setScore(char tag, int score)
{
switch (tag)
{
case 'm':mScore = score; break;
case 'p':pScore = score; break;
case 'e':eScore = score; break;
case 'c':cScore = score; break;
}
}
void output1()
{
cout << "编 号:" <<Num << endl;
cout << "姓 名:" << Name << endl;
cout << "性 别:" << Sex << endl;
cout << "家庭住址:" << Adr << endl;
cout << "联系电话:" << Tel << endl;
cout << "数 学:" << mScore << endl;
cout << "物 理:" << pScore << endl;
cout << "英 语:" << eScore << endl;
cout << "程序设计:" << cScore << endl;
}
protected:
int mScore;
int pScore;
int eScore;
int cScore;
};
class Teacher :public Person
{
public:
Teacher(string a=" ",double b=0)
{
ZhiCheng=a;
GongZi=b;
}
void SetZhiCheng(string a)
{
ZhiCheng = a;
}
void SetGongZi(double a)
{
GongZi = a;
}
void output2()
{
cout << "编 号:" << Num << endl;
cout << "姓 名:" << Name << endl;
cout << "性 别:" <<Sex << endl;
cout << "家庭住址:" << Adr << endl;
cout << "联系电话:" << Tel << endl;
cout << "职 称:" << ZhiCheng << endl;
cout << "工 资:" << GongZi << endl;
}
protected:
string ZhiCheng;
double GongZi;
};
int main()
{
Person A;
string Num1;
string Name1;
char Sex1;
string Adr1;
string Tel1;
string Tel11;
string Num2;
string Name2;
char Sex2;
string Adr2;
string Tel2;
int mScore;
int pScore;
int eScore;
int cScore;
char op;
int opScore;
string Num3;
string Name3;
char Sex3;
string Adr3;
string Tel3;
string ZhiCheng;
double GongZi;
double opGongZi;
cin >> Num1 >> Name1 >> Sex1>>Adr1 >> Tel1>> Tel11 ;
cin >> Num2 >> Name2 >> Sex2 >> Adr2 >> Tel2 >> mScore>> pScore>> eScore>> cScore>>op>> opScore;
cin >> Num3 >> Name3 >> Sex3 >> Adr3 >> Tel3 >> ZhiCheng>> GongZi>> opGongZi;
A.SetNum(Num1);
A.SetName(Name1);
A.SetNum(Sex1);
A.SetAdr(Adr1);
A.SetTel(Tel1);
A.output();
cout << "\n";
A.SetTel(Tel11);
A.output();
cout << "\n";
Student B;
B.SetNum(Num2);
B.SetName(Name2);
B.SetNum(Sex2);
B.SetAdr(Adr2);
B.SetTel(Tel2);
B.setScore('m', mScore);
B.setScore('p', pScore);
B.setScore('e', eScore);
B.setScore('c', cScore);
B.output1();
cout << "\n";
B.setScore(op, opScore);
B.output1();
cout << "\n";
Teacher C;
C.SetNum(Num3);
C.SetName(Name3);
C.SetNum(Sex3);
C.SetAdr(Adr3);
C.SetTel(Tel3);
C.SetZhiCheng(ZhiCheng);
C.SetGongZi(GongZi);
C.output2();
cout << "\n";
C.SetGongZi(opGongZi);
C.output2();
return 0;
}