运用C++语言描述公司类、雇员类、职务类,每一个类应包含数据成员和成员函数。设计基类和派生类,并运用多态性和虚函数的知识。注重面向对象程序设计理论知识的理解与实际的动手编程能力,要求学生设计具有继承与派生以及多态性的类,理解面向对象程序设计的核心的概念。 本课程设计要实现的主要功能如下: 1)建立公司类、雇员类、职务类 2)公司、雇员、职务信息的初始化 3)公司、雇员、职务信息的添加、修改、删除、查找 4)雇员、职务信息的输出 5)将职务信息保存为文件
时间: 2023-07-10 19:30:17 浏览: 100
基类与对象成员-类的继承 C++
好的,让我们逐步实现这些功能。首先,定义一个公司类:
```cpp
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
class Company {
public:
Company(string name, string address, string phone);
void addEmployee(Employee* employee);
void removeEmployee(Employee* employee);
void modifyEmployee(Employee* employee);
Employee* findEmployee(string name);
void printEmployees();
void saveToFile(string filename);
private:
string name;
string address;
string phone;
vector<Employee*> employees;
};
```
这里我们定义了一个公司类,包含名称、地址和电话三个数据成员,以及添加、删除、修改、查找、输出和保存员工信息的成员函数。同时,我们使用了一个向量容器来存储雇员指针。
接下来我们定义一个雇员类:
```cpp
class Employee {
public:
Employee(string name, int age, string jobTitle);
virtual void printInfo();
string getName();
int getAge();
string getJobTitle();
protected:
string name;
int age;
string jobTitle;
};
```
我们使用了虚函数来定义一个打印信息的函数,并定义了名称、年龄和职务三个数据成员。注意这里我们还将构造函数定义为了虚函数,以便在派生类中使用。
然后我们定义一个职务类:
```cpp
class JobTitle {
public:
JobTitle(string title, double salary);
virtual void printInfo();
string getTitle();
double getSalary();
protected:
string title;
double salary;
};
```
同样使用了虚函数来定义一个打印信息的函数,并定义了职务名称和薪水两个数据成员。
现在我们来实现具体的功能。首先是公司类的实现:
```cpp
Company::Company(string name, string address, string phone) {
this->name = name;
this->address = address;
this->phone = phone;
}
void Company::addEmployee(Employee* employee) {
employees.push_back(employee);
}
void Company::removeEmployee(Employee* employee) {
for (int i = 0; i < employees.size(); i++) {
if (employees[i] == employee) {
employees.erase(employees.begin() + i);
break;
}
}
}
void Company::modifyEmployee(Employee* employee) {
for (int i = 0; i < employees.size(); i++) {
if (employees[i]->getName() == employee->getName()) {
employees[i] = employee;
break;
}
}
}
Employee* Company::findEmployee(string name) {
for (int i = 0; i < employees.size(); i++) {
if (employees[i]->getName() == name) {
return employees[i];
}
}
return NULL;
}
void Company::printEmployees() {
for (int i = 0; i < employees.size(); i++) {
employees[i]->printInfo();
}
}
void Company::saveToFile(string filename) {
ofstream ofs(filename);
for (int i = 0; i < employees.size(); i++) {
ofs << employees[i]->getName() << "," << employees[i]->getAge() << "," << employees[i]->getJobTitle() << endl;
}
ofs.close();
}
```
这里我们实现了添加、删除、修改、查找、输出和保存员工信息的功能。注意在查找雇员时,我们使用了雇员类的getName()函数来获取雇员姓名。
接着是雇员类的实现:
```cpp
Employee::Employee(string name, int age, string jobTitle) {
this->name = name;
this->age = age;
this->jobTitle = jobTitle;
}
void Employee::printInfo() {
cout << "Name: " << name << endl;
cout << "Age: " << age << endl;
cout << "Job Title: " << jobTitle << endl;
}
string Employee::getName() {
return name;
}
int Employee::getAge() {
return age;
}
string Employee::getJobTitle() {
return jobTitle;
}
```
我们实现了打印信息和获取数据成员的功能,同时使用了虚函数来定义打印信息的方式,以便在派生类中重写。
最后是职务类的实现:
```cpp
JobTitle::JobTitle(string title, double salary) {
this->title = title;
this->salary = salary;
}
void JobTitle::printInfo() {
cout << "Title: " << title << endl;
cout << "Salary: " << salary << endl;
}
string JobTitle::getTitle() {
return title;
}
double JobTitle::getSalary() {
return salary;
}
```
同样实现了打印信息和获取数据成员的功能,并使用了虚函数来定义打印信息的方式。
现在我们可以使用这些类来完成具体的操作,比如:
```cpp
int main() {
Company company("ABC Inc.", "123 Main St.", "555-1234");
Employee* employee1 = new Employee("John Smith", 30, "Manager");
Employee* employee2 = new Employee("Mary Johnson", 25, "Assistant");
company.addEmployee(employee1);
company.addEmployee(employee2);
JobTitle* jobTitle1 = new JobTitle("Manager", 50000);
JobTitle* jobTitle2 = new JobTitle("Assistant", 30000);
employee1->printInfo();
jobTitle1->printInfo();
employee2->printInfo();
jobTitle2->printInfo();
company.printEmployees();
Employee* foundEmployee = company.findEmployee("John Smith");
if (foundEmployee != NULL) {
foundEmployee->printInfo();
}
company.saveToFile("employees.txt");
return 0;
}
```
这里我们创建了一个公司对象,并添加了两个雇员对象。同时,我们创建了两个职务对象,并输出了信息。然后我们输出了公司的所有雇员信息,并查找了一个雇员信息。最后,我们将所有雇员信息保存到文件中。
希望这个示例程序可以帮助你更好地理解如何运用C++语言描述公司类、雇员类和职务类,以及如何设计基类和派生类,并运用多态性和虚函数的知识。
阅读全文