我正在研究C++的指针和继承。\
我制作了 vector Employee 类的指针,其中包含姓名和薪水。 另外,它还具有打印功能,可以打印姓名和工资。
我把它设为虚拟
virtual void print() const;
这里也是函数的实现
void Employee::print() const
{
cout << "Inquiry Employee info..." << endl;
cout << "Name:" << get_name() << "\n";
cout << "Salary:" << get_salary() << "\n" << "\n";
}
在派生类中,我又添加了一个私有(private)数据部门名称并覆盖打印函数。 我将派生类放入指针 vector 中,并尝试在派生函数上调用该函数。 但是,它只调用基类中的函数。
当我创建派生类对象本身并调用该打印函数时,它起作用了。
我应该如何更改才能使基类指针 vector 中的派生类对象可以调用派生类中的函数?
添加##
#ifndef MANAGER_H
#define MANAGER_H
#include <string>
#include<iostream>
#include "ccc_empl.h"
#include <iomanip>
class Manager : public Employee
{
public:
Manager();
Manager(string name, double salary, string dept);
~Manager();
virtual string get_department() const;
void print();
private:
string deptName;
};
#endif
实现
#include <iostream>
#include <string>
#include "manager.h"
#include "ccc_empl.h"
Manager::Manager(){}
Manager::Manager(string name, double salary, string dept)
: Employee(name,salary)
{
deptName = dept;
}
Manager::~Manager(){}
string Manager::get_department() const
{
return deptName;
}
void Manager::print()
{
cout << "Inquiry Manager info..." << endl;
cout << "Name:" << get_name() << "\n";
cout << "Salary:";
cout << get_salary() << "\n";
cout << "Department:"<< get_department() << endl << endl;
}
最佳答案
您还没有向我们展示派生类打印函数,但我猜您忘记将其声明为 const。很容易犯的错误。
关于C++指针 vector <base_class*>放置派生类但切片打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799175/