试图从多态函数获得不同的输出

时间:2018-06-24 14:57:11

标签: c++ function class c++11 polymorphism

嗨,StackOverflow社区!
我希望根据要打印的对象的类别获得不同的输出,但事实并非如此。

Medium.h

#include "Datum.h"
#include "Person.h"

class Medium
{
public:
    Medium(std::string initTitel);
    virtual ~Medium(void);
    void ausgabe() const;
    bool ausleihen(Person person, Datum ausleihdatum);
    void zurueckgeben();
    unsigned int getID();
protected:
    static unsigned int currentID;
    unsigned int ID;
    std::string titel;
    bool status;
    Datum datumAusgeliehen;
    Person personAusgeliehen;
};  

Medium.cpp

#include "Medium.h"
#include <string>
#include <iostream>

unsigned int Medium::currentID = 1;

Medium::Medium(std::string initTitel): titel(initTitel), status(false)
{
    ID = currentID++;
}
Medium::~Medium(void)  {}
void Medium::ausgabe() const
{
    std::cout << "ID: " << ID << std::endl;
    std::cout << "Titel: " << titel << std::endl;
    switch (status)
    {
    case true:
        std::cout << "Status : Das Medium ist seit dem " 
                  << datumAusgeliehen  << " an " 
                  << personAusgeliehen.getName() << " ausgeliehen." 
                  << std::endl;
        break;

    case false:
        std::cout << "Status: Medium ist zurzeit nicht verliehen." << std::endl;
        break;
    }
}  

该功能可打印 ID 标题状态到控制台。
现在,根据Medium type ,我想使用函数void ausgabe() const打印更多信息。

示例:如果媒介是book(德语中的 = book ),则除了其他可用信息外,还应打印有关 author 的信息在Medium类中。即,我有一个名为Buch子类,它也具有一个void ausgabe() const函数,该函数应该在类Buch中打印这些额外的信息。

Buch.h

#include "Medium.h"
class Buch: public Medium
{
public:
    Buch();
    Buch(std::string initTitel, std::string initAutor);
    virtual ~Buch();
    void ausgabe() const;
private:
    std::string autor;
};  

Buch.cpp

#include "Buch.h"
Buch::Buch(std::string initTitel, std::string initAutor): Medium(initTitel), autor(initAutor) 
{ // TODO Auto-generated constructor stub  }

Buch::~Buch()    { // TODO Auto-generated destructor stub   }

void Buch::ausgabe() const
{
    Medium::ausgabe();
    std::cout << "Autor: " << autor << std::endl;
}  

据我所知:在类Buch中,在调用输出函数ausgabe()时,将自动打印额外信息autor。但是对于Medium类中的其余信息,您能帮忙吗?感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

  

现在,根据要打印的介质的类型,我想添加   要打印的其他信息。例如。如果媒介是一本书,   有关作者的信息也应打印。

因此,您正在寻找动态多态性。然后,您需要在基类(void ausgabe()const)中使virtual函数成为Medium,以便进行多态调用。并且您需要override在其他子类中(例如,类Buch)。无论如何,在给定的代码中这些都不存在。除此之外,您还需要在基类上使用virtual析构函数。

然后在您的班级Buch的{​​{1}}中应该是:

ausgabe()

然后在您的主目录中执行以下操作:See an example code here

void ausgabe()const override
{
    Medium::ausgabe(); // call first base class's ausgabe()
    std::cout << "autor :" << autor << std::endl;
}

PS:始终尝试在社区中发布英语书面代码,以便每个人都可以遵循。