如何在派生类中实现虚函数?

时间:2020-09-25 20:32:42

标签: c++ virtual

考虑以下UML:

UML for 4 classes

当我尝试在rate()中实现虚拟函数Single.cpp时,出现错误:无法分配抽象类型为'Single'的对象
预订* b =新的Single();

image of the error I'm getting

addBooking()函数应创建类型为Single的{​​{1}}指针,将指针添加到BookingQList源自{{1} })并返回BookingList指针。

当我注释掉虚函数时,一切正常。为什么会发生这种情况,我该如何解决?

以下是我程序的最低版本:

QList<Booking*>
Booking
#ifndef BOOKING_H
#define BOOKING_H

class Booking
{
public:
    Booking();
    double SINGLE_PPPN = 200.00;
    virtual double rate() = 0;
};

#endif // BOOKING_H
#include "booking.h"

Booking::Booking()
{
}
#ifndef BOOKINGLIST_H
#define BOOKINGLIST_H
#include <QList>
#include <iostream>
#include "booking.h"
#include "single.h"

using namespace std;

class BookingList : public QList<Booking*>
{
public:
    BookingList();
    Booking* addBooking();
    void deleteAll();
};

#endif // BOOKINGLIST_H
#include "bookinglist.h"

BookingList::BookingList()
{
}

Booking* BookingList::addBooking()
{
    Booking* b = new Single();

    this->append(b);

    cout << "Total bookings: " << this->size() << "\n\n" <<endl;

    return b;
}

void BookingList::deleteAll()
{
    for (int i = 0; i < this->count(); i++)
    {
        cout << "Deleting Item At: " << i << endl;
        delete this->at(i);
    }
}
#ifndef SINGLE_H
#define SINGLE_H
#include "booking.h"

class Single : public Booking
{
public:
    Single();
};

#endif // SINGLE_H

1 个答案:

答案 0 :(得分:2)

您需要在类定义中声明方法override

class Single : public Booking
{
public:
    Single();
    double rate() override;  // this line
};

然后您实际上可以像以前一样在cpp文件中实现该方法

double Single::rate()
{
    return Booking::SINGLE_PPPN;
}