其他类的C ++纯虚方法实现

时间:2014-04-24 09:11:08

标签: c++ derived-class pure-virtual

让我们看看来自外部库

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

和我的抽象类 B 与纯虚拟method()

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

我创建了由 A B

衍生的 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

4 个答案:

答案 0 :(得分:2)

D中定义该功能,并使用A提供的实现。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

所以D应该是,

class D : public A, public B {

    void method() 
    {
       //implementation 
    }
//other code

};

答案 3 :(得分:1)

从抽象基类派生的类也将是抽象的,除非您覆盖派生类中的每个纯虚函数。