c ++指针向量<base_class *>放置派生类但切片打印</base_class *>

时间:2013-04-03 22:13:49

标签: c++ pointers vector derived-class

我正在研究C ++的指针和继承。\

我制作了矢量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";
}

在派生类中,我添加了一个私有数据部门名称并覆盖打印功能。 我把派生类放在指针向量中,并试图在派生函数上调用该函数。 但是,它只调用基类中的函数。

当我自己创建派生类对象并调用该打印函数时,它起作用了。

我应该更改什么才能使基类指针向量中的派生类对象可以在派生类中调用函数?

加法##

#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;
}

1 个答案:

答案 0 :(得分:2)

你没有向我们展示Derived类的打印功能,但我猜你忘了把它声明为const。容易犯错误。