我有头文件“testcode.h”

#ifndef TESTCODE_H
#define TESTCODE_H

class A
{
public:
    A();
    ~A();
    virtual void Foo();

public:
    int mPublic;

protected:
    int mProtected;

private:
    int mPrivate;
};

class B : public A
{
public:
    B();
    ~B();
    void Foo();
};

#endif // TESTCODE_H

和源文件
#include "TestCode.h"

int main(int argc, char* argv[])
{
    A* b = new B();
    b->Foo();

    b->mPublic = 0;
    b->mProtected = 0;
    b->mPrivate = 0;

    delete b;

    return 0;
}

在这里,我想知道,当我调用“b-> Foo”时,将调用类B的Foo函数而不是类A。但是,类B的Foo函数并未声明为虚函数。谁能详细说明一下?

最佳答案

在基类中将函数声明为虚拟函数后,在派生类的函数中是否使用virtual关键字就无关紧要。在派生类中,它将始终是虚拟的(无论是否如此声明)。

根据C++ 11标准10.3.2:

09-10 01:31
查看更多