首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从多态函数获得不同的输出?

如何从多态函数获得不同的输出?
EN

Stack Overflow用户
提问于 2018-07-24 01:25:00
回答 1查看 0关注 0票数 0

Medium.h

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
#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,我想使用的功能打印额外的信息void ausgabe() const

Buch.h

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
#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类上的剩余信息,你能帮忙吗?

EN

Stack Overflow用户

发布于 2018-07-24 10:43:37

在你的类Buchausgabe()应该是:

代码语言:javascript
运行
复制
void ausgabe()const override
{
    Medium::ausgabe(); // call first base class's ausgabe()
    std::cout << "autor :" << autor << std::endl;
}

然后在你的main,你可以这样做: See an example code here

代码语言:javascript
运行
复制
int main ()
{
   std::unique_ptr<Medium> some_objects[2];
   some_objects[0] = std::make_unique<Medium>("Some Title");
   some_objects[1] = std::make_unique<Buch>("Title 2", "user9775960");

   for(auto& obj_type: some_objects)
      obj_type->ausgabe();
   return 0;
}
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100005652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档