设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。c++编码
时间: 2023-07-10 21:03:10 浏览: 123
好的,这是一个比较复杂的程序,需要用到很多的 C++ 特性。我将为你提供一个简单的示例,来演示如何使用这些特性进行编码。
假设我们要设计一个公司人员管理系统,可以管理不同类型的员工,如普通员工、经理和销售人员等。我们可以使用继承来表示不同类型的员工,抽象类来定义所有员工都有的属性和方法,虚函数和多态来实现不同类型员工的不同行为,虚基类来解决多继承中的二义性问题。
首先,我们定义一个 Employee 基类,它是一个抽象类,包含所有员工都有的属性和方法:
```c++
class Employee {
protected:
string name;
int age;
string id;
public:
Employee(string _name, int _age, string _id) : name(_name), age(_age), id(_id) {}
virtual void printInfo() = 0; // 纯虚函数,子类必须实现
};
```
然后,我们定义三个子类,分别表示普通员工、经理和销售人员:
```c++
class Staff : public Employee {
protected:
double salary;
public:
Staff(string _name, int _age, string _id, double _salary) : Employee(_name, _age, _id), salary(_salary) {}
virtual void printInfo() {
cout << "Staff: name=" << name << ", age=" << age << ", id=" << id << ", salary=" << salary << endl;
}
};
class Manager : public virtual Employee {
protected:
double salary;
public:
Manager(string _name, int _age, string _id, double _salary) : Employee(_name, _age, _id), salary(_salary) {}
virtual void printInfo() {
cout << "Manager: name=" << name << ", age=" << age << ", id=" << id << ", salary=" << salary << endl;
}
};
class Salesman : public virtual Employee {
protected:
double commission;
public:
Salesman(string _name, int _age, string _id, double _commission) : Employee(_name, _age, _id), commission(_commission) {}
virtual void printInfo() {
cout << "Salesman: name=" << name << ", age=" << age << ", id=" << id << ", commission=" << commission << endl;
}
};
```
在上面的代码中,我们使用了虚基类,在 Manager 和 Salesman 中都继承了 Employee,但是只有一个实例被创建,避免了多继承中的二义性问题。
最后,我们可以定义一个 Company 类,来管理所有员工:
```c++
class Company {
private:
vector<Employee*> staffs;
public:
void add(Employee* staff) {
staffs.push_back(staff);
}
void printAll() {
for (auto staff : staffs) {
staff->printInfo();
}
}
void saveToFile(string filename) {
ofstream fout(filename);
for (auto staff : staffs) {
fout << staff->printInfo() << endl;
}
fout.close();
}
void loadFromFile(string filename) {
ifstream fin(filename);
string line;
while (getline(fin, line)) {
// 解析每一行数据,创建对应的员工对象
// 将员工对象添加到 staffs 中
}
fin.close();
}
};
```
在上面的代码中,我们使用了文件的输入/输出,可以将员工信息保存到文件中,也可以从文件中读取员工信息。
现在,我们可以使用这个公司人员管理系统来管理公司的员工了。例如,我们可以创建几个员工对象,并将它们添加到 Company 中:
```c++
Staff* staff1 = new Staff("张三", 20, "001", 5000);
Manager* manager1 = new Manager("李四", 30, "002", 10000);
Salesman* salesman1 = new Salesman("王五", 25, "003", 0.1);
Company company;
company.add(staff1);
company.add(manager1);
company.add(salesman1);
company.printAll();
```
运行结果应该如下:
```
Staff: name=张三, age=20, id=001, salary=5000
Manager: name=李四, age=30, id=002, salary=10000
Salesman: name=王五, age=25, id=003, commission=0.1
```
这个程序只是一个简单的示例,实际的公司人员管理系统可能会更加复杂,但是这个示例演示了如何使用继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容来设计一个程序。
阅读全文