设计一个基类Person,包括姓名、性别和年龄及展示方法display,由它派生出学生类Student和教师类Teacher,学生类增加学号、年级、专业等属性及展示方法display,教师类增加教师号、职称、工资等属性和展示方法display。编写主函数对设计的类进行测试。以上类中涉及的字符串都很短,使用字符数组存储即可。不需要动态申请内存。
#include<iostream>
using namespace std;
class Person
{
public:
char m_nName[20];//字符数组
char m_nSex[5];
int Age;
Person(const char* name, const char* sex, int age) //构造Person
{
strcpy_s(m_nName, strlen(name) + 1, name);//赋初始值
strcpy_s(m_nSex, strlen(sex) + 1, sex);
Age = age;
}
void Display()//Display函数
{
cout<< m_nName<<" \t"<<m_nSex<< " \t"<< Age<<endl;
}
~Person(){}
};
class Student:public Person
{
char m_nId[20]; //Student类特有属性定义
char m_nGrade[20];
char m_nMajor[20];
public:
Student(const char* name, const char* sex, int age, const char* id, const char* grade, const char* major) :Person(name, sex, age) //构造Student类需先构造其父类Person
{
strcpy_s(m_nId, strlen(id) + 1, id);
strcpy_s(m_nGrade, strlen(grade) + 1, grade);
strcpy_s(m_nMajor, strlen(major) + 1, major);
}
void Display() //子类Student Display方法覆盖父类Person Display方法
{
cout << m_nName << "\t" << m_nSex << "\t" << Age << "\t" << m_nId << "\t" << m_nGrade << "\t" << m_nMajor << endl;
}
~Student() {}
};
class Teacher :public Person
{
char m_nTeachid[20];
char m_nTitle[20];
char m_nSalary[20];
public:
Teacher(const char* name, const char* sex, int age, const char* teachid, const char* title, const char* salary) :Person(name, sex, age)
{
strcpy_s(m_nTeachid, strlen(teachid) + 1, teachid);
strcpy_s(m_nTitle, strlen(title) + 1, title);
strcpy_s(m_nSalary, strlen(salary) + 1, salary);
}
void Display()
{
cout <<m_nName << "\t" << m_nSex << "\t" << Age << "\t" << m_nTeachid << "\t" << m_nTitle << "\t" << m_nSalary << endl;
}
~Teacher() {}
};
int main()
{
Person P1("张三","男",18);
P1.Display();
Student S1("小明 ", "男", 19, "201703 ", "2017级", "会计学");
S1.Display();
Teacher T1("刘晓燕", "女", 59, "T123", "教授", "保密");
T1.Display();
return 0;
}
跑一下试试:
ok,没有问题!