#include <iostream> #include <string> using namespace std; class Worker { string name; int age; public: //构造函数 Worker(string w_n, int w_a):name(w_n),age(w_a){} //属性打印 void print() { cout << "姓名:" << name << " 年龄:" << age << endl; } //收入计算 virtual int money() = 0; }; class Waiter :public Worker { int base = 3000; int bonus; public: //构造 Waiter(string n,int a,int b):Worker(n,a),bonus(b){} //收入计算 int money() { return base + bonus; } }; class Singer :public Worker { int hour; public: //构造 Singer(string n, int a, int h) :Worker(n, a), hour(h) {} //收入计算 int money() { return hour * 200; } }; class Both :public Waiter, public Singer { public: //构造 Both(string n, int a, int b, int h) :Worker(n,a),Waiter(n,a,b),Singer(n,a,h){} //收入计算 int money() { return Waiter::money() + Singer::money(); } }; int main() { string n1, n2, n3; int a1, a2, a3; int b1, h2, b3, h3; cout << "请输入员工信息:" << endl; cout << "Waiter的姓名年龄以及奖金:" << endl; cin >> n1 >> a1 >> b1; cout << "Singer的姓名年龄以及工时:" << endl; cin >> n2 >> a2 >> h2; cout << "Waiter-Singer的姓名年龄以及奖金和工时:" << endl; cin >> n3 >> a3 >> b3 >> h3; Waiter w(n1, a1, b1); Singer s(n2, a2, h2); Both b(n3,a3, b3, h3); w.print(); cout <<"Waiter工资为:"<< w.money() << endl; s.print(); cout <<"Singer工资为:"<< s.money() << endl; b.print(); cout <<"Waiter-Singer工资为:"<< b.money() << endl; return 0; }
时间: 2024-02-29 13:57:30 浏览: 105
#include <iostream>
这是一个简单的员工工资计算程序,包括一个抽象类 Worker 和三个派生类 Waiter、Singer 和 Both。
Worker 类中有一个纯虚函数 money(),用于计算员工的收入。Waiter 和 Singer 分别继承自 Worker 类,并覆盖了 money() 函数,根据不同的工作内容计算出员工的收入。Both 类同时继承自 Waiter 和 Singer 类,使用了虚拟继承方式,避免了多继承的二义性问题。
在 main 函数中,通过用户输入的方式来初始化三个派生类的对象,分别调用其 print() 函数和 money() 函数,输出员工的个人信息和收入情况。
该程序使用了面向对象的思想,将员工的个人信息和收入信息封装成一个对象,使得程序更加清晰、易于维护。同时,使用了继承和多态的特性,使得程序具有灵活性和可扩展性。
阅读全文