嗨,StackOverflow社区!
我希望根据要打印的对象的类别获得不同的输出,但事实并非如此。
#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;
};
#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
中打印这些额外的信息。
#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;
};
#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
类中的其余信息,您能帮忙吗?感谢您的帮助:)
答案 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:始终尝试在社区中发布英语书面代码,以便每个人都可以遵循。