gpt4 book ai didi

C++ 继承 - 如何使用指向基类对象的指针访问子方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:31 24 4
gpt4 key购买 nike

我有一个处理继承的任务。

我有一个 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() 方法,因为输出了与子类相关的特定信息。但是,在访问数组时,我得到的是员工指针,而不是指向 child 的指针。我附上了他提供的屏幕截图。

Screenshot of what my output needs to look like

我不确定我应该如何完成此任务。

这是我的员工数组声明:

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()) +"}";
}

最佳答案

你想要的是一个指针数组:

Employee *staff[4];

现在您可以将指针分配给 Employee,并因此将指向 Employee 的子代的指针分配给它:

staff[0] = new Manager("IT", 100, "MF1", "ML1");

然后你可以调用 Employee 的函数:

staff[0]->toString();

关于C++ 继承 - 如何使用指向基类对象的指针访问子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14993441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com