类外的C++虚函数实现

Man*_*ish 8 c++ polymorphism virtual-functions

我是C++的新手.在尝试样本多态性代码时,我发现派生类中的基类虚函数定义只有在派生类中定义或外部使用派生类中的声明时才可能.

以下代码给出错误:

class B
{
public:
    virtual void f();
};

void B::f() {
    std::cout<<"B::f";
}

class D : public B
{
public:
    void f2() {int b;}
};

// error: no "void D::f()" member function declared in class "D"
void D::f() {
    std::cout<<"D::F";
}
Run Code Online (Sandbox Code Playgroud)

如果我在D中声明f(),它可以工作.我想知道为什么我需要在Base类中声明它时再次显式声明该函数.编译器可以从Base类获得签名吗?

提前致谢..

CB *_*ley 9

您无法将成员添加到类定义之外的类中.如果你想要D覆盖,B::f那么你必须在类定义中声明它.这些都是规则.

声明基类中的成员不会自动为派生类提供相同的成员.从基类继承为派生类提供基类的所有成员,因此您可以选择是否覆盖,隐藏或添加到基类成员,但是您必须通过声明覆盖函数来指示在类定义中覆盖的选项.