类的继承之二--简单的继承与使用

xiaoxiao2025-11-29  2

代码:

#include<iostream> #include<Windows.h> #include<string> #include<cstring> #define MAXN 1050 #define LOCAL using namespace std; #ifndef LOCAL //如果加了日期就把#define LOCAL删掉即可使用 class Date { private: int year, month, day; public: Date() :year(1900), month(1), day(1) {} Date(int y, int m, int d) :year(y), month(m), day(d) {} Date(Date &date) { year = date.year; month = date.month; day = date.day; } void Display() { cout << year << ' ' << month << ' ' << day << endl; } ~Date() {} }; #endif class Student { private: string name; int age; int chinese, math, english; public: Student():name("none"),age(0),chinese(0),math(0),english(0) {} //默认构造函数初始化 Student(string name, int age, int chinese, int math, int english); string getName() { return name; } void Input(); void Display(); ~Student() {} }; class Worker { protected: string name; int age; int salary; public: Worker() :name("none"),age(0),salary(0) {} Worker(string name, int age); string getName() { return name; } //void Display() { cout << name << ' '<< age << ' '; }; ~Worker() {} }; class Teacher :virtual public Worker { private: string level; public: Teacher() :level("none") {} //默认调用Worker构造函数我就不写了 Teacher(string name, int age, string level); void Input(); void Match(); void Display(); ~Teacher() {} }; class Admin :virtual public Worker { private: char level; public: Admin():level('0') {} Admin(string name, int age, char level); void Input(); void Match(); void Display(); ~Admin() {} }; class Manager { private: Student * stu; Teacher * teach; Admin * adm; int TeacherNum, AdminNum, StudentNum; public: Manager() :TeacherNum(0), AdminNum(0), StudentNum(0) {} //Manager(int TeacherN, int AdminN); void Alloc(); void ManagerInput(); void ManagerSearch(); void ManagerDisplay(); ~Manager(); }; int main() { //由于只是为了满足题目要求,就没有写完整格式 Manager mng; mng.Alloc(); mng.ManagerInput(); mng.ManagerSearch(); Sleep(5000); mng.ManagerDisplay(); system("pause"); return 0; } Student::Student(string name, int age, int chinese, int math, int english) { this->name = name; this->age = age; this->chinese = chinese;this->math = math;this->english = english; } void Student::Input() { cin >> name >> age >> chinese >> math >> english; } void Student::Display() { cout << name << ' ' << age << ' ' << chinese << ' ' << math << ' ' << english << ' ' << chinese + math + english << endl; //为了简化问题我直接跟着输出了总成绩 } Worker::Worker(string name, int age) { this->name = name; this->age = age; } Teacher::Teacher(string name, int age, string level):Worker(name,age) { this->name = name; this->age = age; this->level = level; } void Teacher::Input() { cin >> name >> age >> level; } void Teacher::Match() { if (level._Equal("jiangshi")) salary = 4000; else if (level._Equal("fujiaoshou")) salary = 5000; else if (level._Equal("jiaoshou")) salary = 6000; else cout << "参数传递出错,请检查输入职称是否合法!" << endl; } void Teacher::Display() { cout << name <<' '<< age <<' '<< level <<' '<< salary<<endl; } Admin::Admin(string name, int age, char level):Worker(name,age) { this->name = name; this->age = age; this->level = level; } void Admin::Input() { cin >> name >> age >> level; } void Admin::Match() { switch (level) { case '1': salary = 2000;break; case '2': salary = 3000;break; case '3': salary = 4000;break; default: cout << "参数传递出错,请检查输入职称是否合法!" << endl;break; } } void Admin::Display() { cout << name << ' ' << age << ' ' << level << ' ' << salary << endl; } /* Manager::Manager(int TeacherN, int AdminN) :TeacherNum(TeacherN), AdminNum(AdminN) { teach = new Teacher[TeacherNum]; } */ void Manager::Alloc() { cout << "请分别输入您想要录入的学生、教师、职员数目:" << endl; cin >> StudentNum >> TeacherNum >> AdminNum; stu = new Student[StudentNum]; //分配内存 teach = new Teacher[TeacherNum]; adm = new Admin[AdminNum]; } void Manager::ManagerInput() { int i; cout << "请依次输入" << StudentNum << "个学生的信息:" << endl; for (i = 0;i < StudentNum;i++) stu[i].Input(); cout << "请依次输入" << TeacherNum << "个教师的信息:" << endl; for (i = 0;i < TeacherNum;i++) { teach[i].Input(); teach[i].Match(); } cout << "请依次输入" << AdminNum << "个职员的信息:" << endl; for (i = 0;i < AdminNum;i++) { adm[i].Input(); adm[i].Match(); } } void Manager::ManagerSearch() { int i; char ch; string NN; cout << "请输入想要查找人员的职位序号(1--学生 2--教师 3--职员):" << endl; cin >> ch; cout << "请输入想要查找人员的姓名:"; cin >> NN; switch (ch) { case '1': for (i = 0;i < StudentNum;i++) if (stu[i].getName()._Equal(NN)) stu[i].Display(); break; case '2': for (i = 0;i < TeacherNum;i++) if (teach[i].getName()._Equal(NN)) teach[i].Display(); break; case '3': for (i = 0;i < AdminNum;i++) if (adm[i].getName()._Equal(NN)) adm[i].Display(); break; default: cout << "参数传递出错,请检查输入序号是否合法!" << endl; break; } } void Manager::ManagerDisplay() { int i; cout << "学生信息(姓名、年龄、语数外成绩、总成绩):" << endl; for (i = 0;i < StudentNum;i++) stu[i].Display(); cout << "教师信息(姓名、年龄、等级、总工资)" << endl; for (i = 0;i < TeacherNum;i++) teach[i].Display(); cout << "职员信息(姓名、年龄、等级、总工资)" << endl; for (i = 0;i < AdminNum;i++) adm[i].Display(); } Manager::~Manager() { delete[] teach; delete[] adm; delete[] stu; }
转载请注明原文地址: https://www.6miu.com/read-5040176.html

最新回复(0)