我有一个处理继承的任务。
我有一个 Employee() 基类,Manager() 和 Intern() 继承自该基类。
我的导师给了我们以下指示:
在 main() 中声明一个人员指针数组并将它们初始化为以下记录:
Manager("IT", 100, "MF1", "ML1")
Manager("HR", 50, "MF2", "ML2")
Intern("SIUE", 0, "IF1", "IL1")
Intern("SLU", 0, "IF2", "IL2")
然后我必须循环并显示数组。他作为示例提供的输出表明,必须调用 Manager() 和 Intern() toString() 方法,因为输出了与子类相关的特定信息。但是,在访问数组时,我得到的是员工指针,而不是指向孩子的指针。我附上了他提供的截图。
我不确定我应该如何做到这一点。
这是我的员工数组声明:
Employee * staff = new Employee[4];
我无法存储指向我不认为的 Manager() 对象的指针。除非有某种方式我可以扇动这个:
staff[0] = new Manager("IT", 100, "MF1", "ML1");
看来我唯一的选择是做这样的事情(顺便说一句,我将如何在一行中做到这一点?):
Employee * e = new Manager("IT", 100, "MF1", "ML1");
staff[0] = *e;
但显然现在当我这样做时:
cout << staff[0].toString();
我将获得基类 Employee() toString() 方法,而不是子类。
以下是 Employee() 和 Manager() 的以下两个类定义,以防相关:
class Employee{
private:
int eid;
string firstName;
string lastName;
public:
Employee();
Employee(int eid, string fname, string lname);
void setEID(int eid);
void setFirstName(string fname);
void setLastName(string lname);
int getEID();
string getFirstName();
string getLastName();
virtual string toString();
};
class Manager : public Employee, IPayable{
private:
string department;
public:
Manager();
Manager(string dept, int eid, string fname, string lname);
double pay();
void setDepartment(string d);
string getDepartment();
string toString();
};
下面是我假设我将如何实现 2 个 toString() 方法,其中 Employee toString() 嵌入在 Manager() toString() 中:
string Employee::toString(){
return "{eid = " + std::to_string(getEID()) + ", firstName = " + getFirstName() + ", lastName = " + getLastName() + "}";
}
string Manager::toString(){
return "Manager{" + Employee::toString() + ", department = " + getDepartment() + ", salary = " + std::to_string(pay()) +"}";
}