我为这个头衔不好,我是自学成才的c ++新手。
我将Company类,Employess类和Person类一起编码为通常的示例。
基本上,我的代码应创建一个公司,向其添加员工并打印完整的员工列表。
这里是我所做的简短版本。它看起来很长,但问题只是两行。其他所有都很好,但是我需要它们以便使代码正常工作。
// g++ test.cpp -o exe.x && ./exe.x
#include <iostream>
#include <vector>
class Person {
private:
std::string name;
std::string surname;
public:
Person() {};
Person(const std::string n, const std::string m) : name(n), surname(m) {}
~Person() {};
friend std::ostream & operator<<(std::ostream & os, const Person & person) {
return os << person.name << " " << person.surname;
}
};
class Employee: public Person {
private:
size_t salary;
public:
Employee(const Person p, const size_t w) {
salary = w;
}
~Employee() {};
friend std::ostream & operator<<(std::ostream & os, const Employee & employee) {
std::cout << employee; // this should call std::cout from Person
return os << ", " << employee.salary; // this should also print the salary as additional info
}
};
class Company {
private:
std::string companyName;
size_t maxNumberEmployees;
std::vector<Employee> employees;
public:
Company(const std::string n, const size_t p) {
companyName = n;
maxNumberEmployees = p;
}
~Company() {
employees.clear();
}
void addEmployee(const Employee employee) {
if (employees.size() < maxNumberEmployees) {
employees.push_back(employee);
}
return;
}
void listEmployees() const {
for (Employee employee : employees) {
std::cout << employee << std::endl;
}
return;
}
};
int main ( int argc, char* argv[] ) {
Company com("CompanyName", 15);
Person per("Name1", "Surname1");
Employee imp(per, 2000);
com.addEmployee(imp);
com.listEmployees();
return 0;
}
Employee
是Person
的子类。在后者中,我定义了std::cout
命令应如何打印类型为Person
的对象。
[当我为std::cout
对象提供Employee
时,我希望我的代码调用std::cout
类的Person
,并在Employee
类中定义了附加信息。
我在遇到这些麻烦的地方加了两条评论。如果我这样运行,代码就会卡住。 std::cout << employee
中肯定有错误,例如它是递归函数。但是我不知道如何以自己想要的方式解决它。
我为这个不好的称呼而道歉,我是自学成才的c ++新手。我将与Employess类和Person类一起编写Company类的常见示例。基本上我的代码应该创建一个公司,...
通常,您需要添加一个间接层。在Person
中,添加虚拟功能以打印内容: