gpt4 book ai didi

c++ pointer vector put derived class but sliced 打印

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

我正在研究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)数据Department Name,并覆盖了print函数。我将派生类放在指针 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;
}

最佳答案

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

关于c++ pointer vector<base_class*> put derived class but sliced 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799175/

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