C++纯虚拟方法由其他类实现

C++ pure virtual method implementation by other class

本文关键字:其他 实现 方法 虚拟 C++      更新时间:2023-10-16

让我们看看来自外部库的类A

class A {
    public:
        void method() {
            cout << "hi";
        }
};

并且我的抽象类B具有纯虚拟method()

class B {
    public:
        virtual void method() = 0;
};

我创建了由AB派生的类D

class D : public A, public B {
};

但当我创建D的实例时,我会得到以下错误:

error: cannot declare variable ‘d’ to be of abstract type ‘D’

如何实现类D它不是一个抽象类,可以从类A调用method()

示例代码:http://ideone.com/yxGWvM

必须覆盖D中的method。你可以这样做

class D : public A, public B {
public:
    void method() override {
        A::method();
    }
};

D中定义函数,并使用A提供的实现。

class D : public A, public B {
public:
    void method() {
        A::method();
    }
};
class B {
    public:
        virtual void method() = 0;
};

B具有纯虚拟函数,从该类(B)派生的任何类(D)都必须重写以创建类的实例。

所以D应该是

class D : public A, public B {
    void method() 
    {
       //implementation 
    }
//other code
};

从抽象基类派生的类也将是抽象的,除非重写派生类中的每个纯虚拟函数。