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

C++ 如何在派生类中实现虚函数?,c++,virtual,C++,Virtual,考虑以下UML: 当我尝试在Single.cpp中实现虚拟函数rate()时,我得到一个错误:无法分配抽象类型为“Single”的对象 预订*b=新单曲() addBooking()函数应该为Booking类型的Single创建一个指针,将指针添加到QList(BookingList派生自QList)并返回Booking指针 当我注释掉虚拟函数时,一切都正常。为什么会发生这种情况,我如何修复它 以下是我的程序的最低版本: \ifndef预订 #定义预订 订票 { 公众: 预订(); 双单_P

考虑以下UML:

当我尝试在
Single.cpp
中实现虚拟函数
rate()
时,我得到一个错误:无法分配抽象类型为“Single”的对象
预订*b=新单曲()

addBooking()
函数应该为
Booking
类型的
Single
创建一个指针,将指针添加到
QList
BookingList
派生自
QList
)并返回
Booking
指针

当我注释掉虚拟函数时,一切都正常。为什么会发生这种情况,我如何修复它

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

\ifndef预订
#定义预订
订票
{
公众:
预订();
双单_PPPN=200.00;
虚拟双速率()=0;
};
#(完)//
#包括“booking.h”
预订
{
}
\ifndef BOOKINGLIST\u H
#定义预订列表
#包括
#包括
#包括“booking.h”
#包括“单个.h”
使用名称空间std;
类BookingList:公共QList
{
公众:
BookingList();
预订*添加预订();
void deleteAll();
};
#endif//BOOKINGLIST\u H
#包括“bookinglist.h”
BookingList::BookingList()
{
}
预订*预订列表::添加预订()
{
预订*b=新单曲();
这个->附加(b);

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

class Single : public Booking
{
public:
    Single();
    double rate() override;  // this line
};
然后,您可以像以前一样在cpp文件中实际实现该方法

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

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

class Single : public Booking
{
public:
    Single();
    double rate() override;  // this line
};
然后,您可以像以前一样在cpp文件中实际实现该方法

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

您需要声明
rate
作为类声明的一部分(在标题中)-否则编译器无法知道您将实现该函数您应该将重写函数“rate()”声明添加到“single.h”中header请将错误消息作为文本添加到您的问题中,以便下一个出现相同错误的人可以找到它。您需要将
rate
声明为类声明的一部分(在标题中)-否则编译器无法知道您将实现该函数您应该将重写的函数“rate()”声明添加到“single.h”中header请将错误消息作为文本添加到您的问题中,以便下一个出现相同错误的人可以找到它。
重写
说明符是一种良好的做法(至少从C++11开始)但在技术上是可选的。最低要求是在派生类中使用相同的参数类型、返回类型和兼容的异常规范声明函数。
重写
说明符有助于发现一些问题(例如,如果继承的函数在基类中不是
虚拟的
).compatible exception specification是什么意思?@ClintTheron这意味着函数是否声明为
noexcept
Booking是Single和BookingList的超类将Booking类型的Single指针附加到QList。在我的客户端中,我创建BookList实例并调用addBooking,它返回一个Booking指针。当我调用meth时ods在此预订指针上,我只获得预订方法。如何通过此预订指针访问Single的方法?是否有可能?谢谢:)使用
重写
说明符是一种很好的做法(至少从C++11开始)但在技术上是可选的。最低要求是在派生类中使用相同的参数类型、返回类型和兼容的异常规范声明函数。
重写
说明符有助于发现一些问题(例如,如果继承的函数在基类中不是
虚拟的
).compatible exception specification是什么意思?@ClintTheron这意味着函数是否声明为
noexcept
Booking是Single和BookingList的超类将Booking类型的Single指针附加到QList。在我的客户端中,我创建BookList实例并调用addBooking,它返回一个Booking指针。当我调用meth时ods在此预订指针上我只获得预订方法。如何通过此预订指针访问Single的方法?是否可能?谢谢:)