#include <iostream> #include <iomanip> using namespace std; class Staff { protected: int code; string name; static int count; public: Staff(string n) { name = n; code = count; count++; } void SetName(string s) { name = s; } string GetName() { return name; } int GetCode() { return code; } static int GetStaffCount() { return count; } }; class Teacher : virtual public Staff { protected: string subject; public: Teacher(string n, string m) : Staff(n) { subject = m; } void SetSubject(string s) { subject = s; } string GetSubject() { return subject; } }; class Officer : virtual public Staff { protected: string work; public: Officer(string n, string m) : Staff(n) { work = m; } void SetWork(string s) { work = s; } string GetWork() { return work; } }; class Teacher_Officer : public Teacher, public Officer { public: Teacher_Officer(string n, string m, string s) : Staff(n), Teacher(n, m), Officer(n, s) {} }; int main() { Teacher t1("孔子", "儒家文学"); // 创建教学类员工t1 Teacher t2("公输班", "建筑学"); Officer o1("端木赐", "财务科长"); // 创建教辅类员工o1 Teacher_Officer to3("颜回", "儒家文学", "副院长"); // 创建教师教辅类员工to3 cout << "共有教职工" << Staff::GetStaffCount() << "人" << endl; cout << t1.GetCode() << ", " << t1.GetName() << ", " << t1.GetSubject() << endl; cout << t2.GetCode() << ", " << t2.GetName() << ", " << t2.GetSubject() << endl; cout << o1.GetCode() << ", " << o1.GetName() << ", " << o1.GetWork() << endl; cout << to3.GetCode() << ", " << to3.GetName() << ", " << to3.GetSubject() << ", " << to3.GetWork() << endl; return 0; }
时间: 2023-06-20 15:09:23 浏览: 76
#include <iostream>
这是一个使用了多重继承和虚继承的示例程序,主要演示了教职工类的继承关系。
其中,Staff是教职工类的基类,包含了教职工的编号和姓名等基本信息。在Staff类中,使用了一个静态变量count来统计创建的教职工数量。
Teacher和Officer类分别继承自Staff类,分别代表教学类员工和教辅类员工。在这两个类中,分别增加了教学科目和工作内容的成员变量,并提供了相应的get和set方法。
Teacher_Officer类则同时继承自Teacher和Officer类,代表既有教学又有教辅工作的教职工。在这个类中,使用了虚继承,避免了多次继承导致的二义性问题。
在main函数中,创建了几个实例对象,并调用相应的成员函数输出各自的信息。同时,使用了Staff类的静态函数GetStaffCount来获取创建的教职工数量,输出到控制台。
阅读全文