C++指针 vector <base_class*>放置派生类但切片打印

标签 c++ pointers vector derived-class

我正在研究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/

相关文章:

c++ - 如何在没有默认构造函数的情况下使用 std::transform 创建 std::array

c++ - 正确使用 std::map 作为类成员

c++ - 从 C++ 文件中读取 ASCII 码和二进制码

c - for循环中的数组未获得正确的值

vector - 在传递给不安全代码之前正确初始化向量

c++ - TFTP 服务器没有从客户端接收

c - 地址重合(指针,C 编程)

c++ - 静态类方法指针数组的正确语法

C++、指针、引用、从一个函数传递到另一个函数、std::vector、std::string

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?