关于c++中的继承,派生类是否可以在不显式定义基类的情况下从基类获得实现

about inheritance in C++, can a derived class get implemetation from base class without explicitly defining it

本文关键字:基类 定义 情况下 实现 继承 c++ 派生 关于 是否      更新时间:2023-10-16

下面有错误

外部符号"public: virtual void __thiscall C::Foo(void)"无法解析(? Foo@C@@UAEXXZ)

所以基本上C::Test()不能自动继承B::Test()的实现,我们必须每次都用c++显式地写它?

class A
{
public:  
    virtual void Foo()=0;
    virtual void Test()=0;
};
class B: public A 
{
public: 
    virtual void Foo();
    virtual void Test()=0;
};
void B::Foo()
{
}

class C: public B
{
public:
    void Foo();
    void Test();
};

void C::Test()
{
}

如果您的派生类从父类声明了一个虚方法,就像Cvoid Foo()所做的那样,那么它也必须实现它。如果你想继承B的实现,那么不要在C中声明void Foo()

class C: public B
{
public:
    void Test();
};

您已经将A::Test()设置为纯虚的,因此子类必须实现它。

这就是A::Test()=0语法的含义。

如果删除=0,并在父类中提供实现,则不需要在子类中实现它。

您只需要在抽象基类中使用纯虚函数来进行动态绑定。

编辑:我很确定你需要实现所有的功能,即使它们是空的。这就是为什么它不能为你编译。
class A
{
    public:  
    virtual void Foo()=0;
    virtual void Test()=0;
};
class B: public A
{
    public: 
    void Foo();
    void Test();
};
void B::Foo()
{
}
void B::Test()
{
}

class C: public B
{
    public:
    void Foo();
    void Test();
};

void C::Foo()
{
}
void C::Test()
{
}