问题描述:
以人类Person为基类公有派生学生类Student和教师类Teacher,main(void)函数完成对其的测试。
Person类结构说明:
Person类的数据成员包括:
①私有数据成员:身份证号no(char [20]型),姓名name(char [20]型)。
Person类成员函数包括:
①有参构造函数Person(char *, char *)和拷贝构造函数Person(const Person &),其中有参构造函数参数默认值为空串或0(当参数为NULL时视为空串处理),输出信息“Person Constructor run”,拷贝构造函数输出信息“Person CopyConstructor run”
②析构函数,析构函数输出信息“Person Destructor run”
③公有函数成员:void setNo(char *)和char * getNo()分别返回和设置身份证号no(当参数为NULL时视为空串处理)
④公有函数成员:void setName(char *)和char* getName()分别返回和设置姓名name(当参数为NULL时视为空串处理)
⑤公有成员函数void show() const用于显示人的基本信息,显示格式为:
No=身份证号,Name=姓名
Student类结构说明:
公有派生学生类Student以人类Person为基类,Student类的结构说明如下:
Student类的数据成员包括:
①私有数据成员:身份证号no继承自Person类,姓名name继承自Person类。
②私有数据成员:学号sNo(char [10]型)
③私有数据成员:班级className(char [20]型)
④私有数据成员:成绩score(double型)
Student类成员函数包括:
①有参构造函数Student(char *, char *, char *,char *, double)和拷贝构造函数Student(const Student &),其中有参构造函数参数默认值为空串或0.0(当参数为NULL时视为空串处理),输出信息“Student Constructor run”,拷贝构造函数输出信息“Student CopyConstructor run”
②析构函数,析构函数输出信息“Student Destructor run”
③公有函数成员:void setSNo(char *)和char * getSNo()分别返回和设置学号sNo(当参数为NULL时视为空串处理)
④公有函数成员:void setClassName(char *)和char* getClassName()分别返回和设置班级className(当参数为NULL时视为空串处理)
⑤公有函数成员:void setScore(double )和double getScore()分别返回和设置成绩score(当参数缺省时视为0.0)
⑥公有成员函数void show() const用于显示学生的基本信息,显示格式为:
No=身份证号,Name=姓名
SNo=学号,ClassName=班级,Score=成绩
其中,成绩四舍五入取整。
Teacher类结构说明:
公有派生教师类Teacher以人类Person为基类,Teacher类的结构说明如下:
Teacher类的数据成员包括:
①私有数据成员:身份证号no继承自Person类,姓名name继承自Person类。
②私有数据成员:工号tNo(char [10]型)
③私有数据成员:部门班级departmentName(char [20]型)
④私有数据成员:工资wages(double型)
Teacher类成员函数包括:
①有参构造函数Teacher(char *, char *, char *,char *, double)和拷贝构造函数Teacher(const Teacher &),其中有参构造函数参数默认值为空串或0.0(当参数为NULL时视为空串处理),输出信息“Teacher Constructor run”,拷贝构造函数输出信息“Teacher CopyConstructor run”
②析构函数,析构函数输出信息“Teacher Destructor run”
③公有函数成员:void setTNo(char *)和char * getTNo()分别返回和设置工号tNo(当参数为NULL时视为空串处理)
④公有函数成员:void setDepartmentName(char *)和char* getDepartmentName()分别返回和设置部门departmentName(当参数为NULL时视为空串处理)
⑤公有函数成员:void setWages(double )和double getWages()分别返回和设置工资wages(当参数缺省时视为0.0)
⑥公有成员函数void show() const用于显示教师的基本信息,显示格式为:
No=身份证号,Name=姓名
TNo=工号,DepartmentName=部门,Wages=工资
其中,工资四舍五入取整。
裁判测试程序样例:
#include <iostream>
using namespace std;
//Person类
class Person{
protected:
char no[20]; //身份证号
char name[20]; //姓名
public:
Person(char *str1=0,char *str2=0);//有参构造
Person(const Person &p); //拷贝构造
~Person(); //析构函数
void show() const; //显示Person信息
void setNo(char *str); //设置身份证号
void setName(char *str); //设置姓名
char *getNo(); //获取身份证号
char* getName(); //获取姓名
};
//有参构造
Person::Person(char *str1,char *str2){
int i;
i=0;
if(str1!=0)
while(str1[i]!='\0'){
no[i]=str1[i];
i++;
}
no[i]='\0';
i=0;
if(str2!=0)
while(str2[i]!='\0'){
name[i]=str2[i];
i++;
}
name[i]='\0';
cout<<"Person Constructor run"<<endl;
}
//拷贝构造
Person::Person(const Person &p){
int i=0;
while(p.no[i]!='\0'){
no[i]=p.no[i];
i++;
}
no[i]='\0';
i=0;
while(p.name[i]!='\0'){
name[i]=p.name[i];
i++;
}
name[i]='\0';
cout<<"Person CopyConstructor run"<<endl;
}
//析构函数
Person::~Person(){
cout<<"Person Destructor run"<<endl;
}
//显示Person
void Person::show() const{
cout<<"No="<<no<<",Name="<<name<<endl;
}
//设置身份证号
void Person::setNo(char *str){
int i=0;
if (str)
while(str[i]!='\0'){
no[i]=str[i];
i++;
}
no[i]='\0';
}
//设置姓名
void Person::setName(char *str){
int i=0;
if (str)
while(str[i]!='\0'){
name[i]=str[i];
i++;
}
name[i]='\0';
}
//获取身份证号
char* Person::getNo(){
return no;
}
//获取姓名
char* Person::getName(){
return name;
}
/* 请在这里填写答案 */
//主函数
int main(){
char s1[19]="130502190001010332";
char s2[20]="doublebest";
char s3[19]="20181234";
char s4[20]="铁1801";
double value=60.67;
Student stu1(s1,s2,s3,s4,value);
stu1.show();
Student stu2=stu1;
cin.getline(s3,10,'\n');
cin.getline(s4,20,'\n');
cin>>value;
stu2.setSNo(s3);
stu2.setClassName(s4);
stu2.show();
Teacher t1(s1,s2,s3,s4,value);
t1.show();
Teacher t2=t1;
t2.setTNo(s3);
t2.setDepartmentName(s3);
t2.show();
return 0;
}
输入样例:
20181234
铁1801
45.45
输出样例:
Person Constructor run
Student Constructor run
No=130502190001010332,Name=doublebest
SNo=20181234,ClassName=铁1801,Score=61
Person CopyConstructor run
Student CopyConstructor run
No=130502190001010332,Name=doublebest
SNo=20181234,ClassName=铁1801,Score=61
Person Constructor run
Teacher Constructor run
No=130502190001010332,Name=doublebest
TNo=20181234,DepartmentName=铁1801,Wages=45
Person CopyConstructor run
Teacher CopyConstructor run
No=130502190001010332,Name=doublebest
TNo=20181234,DepartmentName=20181234,Wages=45
Teacher Destructor run
Person Destructor run
Teacher Destructor run
Person Destructor run
Student Destructor run
Person Destructor run
Student Destructor run
Person Destructor run
代码:
int round(double n)
{
if(n>0)
return n-int(n)>=0.5?int(n)+1:int(n);
else
return -n-int(-n)>=0.5?-(int(-n)+1):-(int(-n));
}
class Student:public Person
{
private:
char sNo[10];
char className[20];
double score;
public:
Student(char * a,char * b,char * c,char * d,double e=0.0):Person(a,b)
{
int i;
score=e;
i=0;
if(c!=0)
while(c[i]!='\0'){
sNo[i]=c[i];
i++;
}
sNo[i]='\0';
i=0;
if(d!=0)
while(d[i]!='\0'){
className[i]=d[i];
i++;
}
className[i]='\0';
cout<<"Student Constructor run"<<endl;
}
Student(const Student &p):Person(p)
{
int i;
score=p.score;
i=0;
while(p.sNo[i]!='\0'){
sNo[i]=p.sNo[i];
i++;
}
sNo[i]='\0';
i=0;
while(p.className[i]!='\0'){
className[i]=p.className[i];
i++;
}
className[i]='\0';
cout<<"Student CopyConstructor run"<<endl;
}
~Student()
{
cout<<"Student Destructor run"<<endl;
}
void setSNo(char * c)
{
int i=0;
if (c)
while(c[i]!='\0'){
sNo[i]=c[i];
i++;
}
sNo[i]='\0';
}
char * getSNo()
{
return sNo;
}
void setClassName(char * d)
{
int i=0;
if (d)
while(d[i]!='\0'){
className[i]=d[i];
i++;
}
className[i]='\0';
}
char* getClassName()
{
return className;
}
void setScore(double e)
{
score=e;
}
double getScore()//分别返回和设置成绩score(当参数缺省时视为0.0)
{
return score;
}
void show()const
{
cout<<"No="<<no<<",Name="<<name<<endl;
cout<<"SNo="<<sNo<<",ClassName="<<className<<",Score="<<round(score)<<endl;
}
};
class Teacher:public Person
{
private:
char tNo[10];
char departmentName[20];
double wages;
public:
Teacher(char * a, char * b, char * c,char * d, double e=0.0):Person(a,b)
{
int i;
wages=e;
i=0;
if(c!=0)
while(c[i]!='\0'){
tNo[i]=c[i];
i++;
}
tNo[i]='\0';
i=0;
if(d!=0)
while(d[i]!='\0'){
departmentName[i]=d[i];
i++;
}
departmentName[i]='\0';
cout<<"Teacher Constructor run"<<endl;
}
Teacher(const Teacher &p):Person(p)
{
int i;
i=0;
while(p.tNo[i]!='\0'){
tNo[i]=p.tNo[i];
i++;
}
tNo[i]='\0';
i=0;
while(p.departmentName[i]!='\0'){
departmentName[i]=p.departmentName[i];
i++;
}
departmentName[i]='\0';
wages=p.wages;
cout<<"Teacher CopyConstructor run"<<endl;
}
~Teacher()
{
cout<<"Teacher Destructor run"<<endl;
}
void setTNo(char * c)
{
if(c==NULL)
{
*tNo='\0';
}
int i=0;
if (c)
while(c[i]!='\0'){
tNo[i]=c[i];
i++;
}
tNo[i]='\0';
}
char * getTNo()
{
return tNo;
}
void setDepartmentName(char * d)
{
if(d==NULL)
{
*departmentName='\0';
}
int i=0;
if (d)
while(d[i]!='\0'){
departmentName[i]=d[i];
i++;
}
departmentName[i]='\0';
}
char* getDepartmentName()
{
return departmentName;
}
void setWages(double e)
{
wages=e;
}
double getWages()
{
return wages;
}
void show() const
{
cout<<"No="<<no<<",Name="<<name<<endl;
cout<<"TNo="<<tNo<<",DepartmentName="<<departmentName<<",Wages="<<round(wages)<<endl;
}
};
标签:char,run,第二个,Person,void,问题,第十四天,Student,Teacher From: https://www.cnblogs.com/czfznb/p/17372128.html