2

C++のポインタと継承について勉強中です。\

名前と給与を含むベクター従業員クラスのポインターを作成しました。また、氏名や給与をプリントアウトするプリント機能も搭載。

仮想化しました

   virtual void print() const;

また、ここに関数の実装があります

void Employee::print() const
{
    cout << "Inquiry Employee info..." << endl;
    cout <<  "Name:" << get_name() << "\n";
    cout << "Salary:" <<  get_salary() << "\n" << "\n";
}

派生クラスでは、個人データの部門名をもう 1 つ追加し、印刷機能をオーバーライドしました。派生クラスをポインターベクトルに配置し、派生関数で関数を呼び出そうとしました。ただし、基本クラスの関数のみを呼び出します。

派生クラスオブジェクト自体を作成し、その印刷関数を呼び出すと、機能しました。

基本クラスのポインター ベクトルの派生クラス オブジェクトを派生クラスの関数を呼び出せるようにするには、何を変更すればよいですか?

添加 ##

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

1 に答える 1

2

Derived クラスの print 関数は表示されていませんが、const を宣言するのを忘れていたと思います。間違いやすい。

于 2013-04-03T22:22:55.740 に答える