问题描述:
以人类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";