虚函数不称为 C++

virtual function is not called c++

本文关键字:C++ 函数      更新时间:2023-10-16

我有:

class DeliveryVehicle{
public:
    //c'tor
    DeliveryVehicle(const char* ID, Quality quality);
    //d'tor
    virtual ~DeliveryVehicle();
    int performDeliveryDay(int* numberOfDeliveries);
    ...
protected:
    ...                 
        /* PrintDailySummary: here numberOfDeliveries is a "dummy" parameter but 
        it would be used in the ProfessionalDeliveryVehicle overriding function */
        virtual void PrintDailySummary(int dailyProfit, int numberOfDeliveries = 0) const;
};

可以看出,performDeliveryDay() 是一个非虚拟函数,只有打印函数是虚拟的,因为我想在派生类型中打印额外的信息。

Virtual PrintDailySummary() 在非虚拟函数 performDeliveryDay() 中调用

[我不添加 performDeliveryDay() 的实现 - 如果相关,我将编辑我的帖子]

此外,我有派生类:

class ProfessionalDeliveryVehicle:public DeliveryVehicle {
public:
    //c'tor
    ProfessionalDeliveryVehicle(const char* ID, Quality quality):
                                DeliveryVehicle(ID,quality) {}
    //d'tor
    // Vehicle destructor is called by default
protected:
    void PrintDailySummary(int dailyProfit, int numberOfDeliveries);
};

派生类中打印函数的实现为:

void ProfessionalDeliveryVehicle::PrintDailySummary(int dailyProfit, int numberOfDeliveries){
    DeliveryVehicle::PrintDailySummary(dailyProfit, numberOfDeliveries);
    // print some extra statistics
}

在程序中,我有一个基指针队列,这些指针可能指向基类或派生类。

对于队列中的每个元素,我调用函数 performDeliveryDay()。我希望看到派生类对象的额外打印。出于某种原因,我没有看到它们,只有基本方法的打印。当我将断点放在派生类的打印函数中时,我看到它甚至没有进入。

有人可以指出我的问题吗?谢谢

编辑:Etienne Maheu指出了这个问题。打印功能 - "const"部分 - 签名不匹配。问题解决了。

派生类的虚拟方法没有相同的签名。它缺少const限定符。可能还希望根据您的使用情况指定默认值。

virtual void PrintDailySummary(int dailyProfit, int numberOfDeliveries = 0) const;
void PrintDailySummary(int dailyProfit, int numberOfDeliveries);

注意:如果您使用的是 C++11,则可能需要使用 override 关键字向编译器声明您的覆盖意图。这将有助于在编译时捕获此类错误。