我有头文件“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: