【问题标题】:c++ pointer vector<base_class*> put derived class but sliced printc ++指针向量<base_class *>放置派生类但切片打印
【发布时间】:2013-03-25 19:36:40
【问题描述】:

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

【问题讨论】:

  • 由于某种原因,您没有向我们展示 Derived 类打印函数,但如果我不得不猜测,我会说您忘记将其声明为 const。
  • 请发布您的问题的最小完整可编译示例。
  • 我添加了我的代码,但是是的,我忘了放 const.. 谢谢!
  • 你的指针向量在哪里? print() 不是虚拟的。
  • @john:我想你现在可以回答了

标签: c++ pointers vector derived-class


【解决方案1】:

您没有向我们展示 Derived 类打印函数,但我猜您忘记将其声明为 const。容易犯错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多