C++继承的虚方法仍然使用基类实现

Han*_*Han 2 c++ virtual inheritance

我有一个基类叫Packet:

// Header File
class Packet {
public:
    virtual bool isAwesome() const {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

和一个名为的继承类AwesomePacket:

// Header File
class AwesomePacket : public Packet {
public:
    virtual bool isAwesome() const {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我实例化AwesomePacket并调用时isAwesome(),该方法返回false而不是true.为什么会这样?

R S*_*hko 8

你的代码调用在任何可能性都是在Packet构造函数中是令人敬畏的:

Packet::Packet()
{
    // this will always call Packet::isAwesome
    if (isAwesome())
    {
    } 
}
Run Code Online (Sandbox Code Playgroud)

即使使用此Packet构造函数构造AwesomePacket对象的父对象,也不会调用AwesomePacket :: isAwesome.这是因为此时对象还不是AwesomePacket.