gpt4 book ai didi

c++ - 虚函数不叫c++

转载 作者:太空狗 更新时间:2023-10-29 23:35:52 25 4
gpt4 key购买 nike

我有:

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 限定符。可能还想根据您的使用情况指定默认值。

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

void PrintDailySummary(int dailyProfit, int numberOfDeliveries);

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

关于c++ - 虚函数不叫c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27992490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com