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

C++ C++;由其他类实现的纯虚拟方法,c++,derived-class,pure-virtual,C++,Derived Class,Pure Virtual,让我们看看来自外部库的类A class A { public: void method() { cout << "hi"; } }; 我创建了由A和B派生的类D class D : public A, public B { }; 但是当我创建D的实例时,我得到以下错误: 错误:无法将变量“d”声明为抽象类型“d” 如何实现类D它不是一个抽象类,可以从类A调用method() 示例代码: B具有纯虚函数,从该类(B)

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

class A {
    public:
        void method() {
            cout << "hi";
        }
};
我创建了由AB派生的类D

class D : public A, public B {

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

错误:无法将变量“d”声明为抽象类型“d”

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

示例代码:

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

所以D应该是

class D : public A, public B {

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

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

所以D应该是

class D : public A, public B {

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

};

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

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

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

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

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

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

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

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

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

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

@Warthel4578您在一个不同的方法中定义的是什么。如果要从D调用该方法,则应使用::method()@Warthel4578在不同的方法中定义。如果要从D调用该方法,应该使用A::method()
override
仅为C++11。如果支持/允许,可以使用它,但也可以不使用它。这里是2014年…;-)选择它作为最佳答案,因为
覆盖
覆盖
仅为C++11。如果支持/允许,可以使用它,但也可以不使用它。这里是2014年…;-)选择它作为最佳答案原因
覆盖
@Warthel4578:这绝对是正确的方法。使用C++11时,您可以添加
覆盖
。由于下层选民没有留下评论,我想他们是来自普通的仇视stackoverflow的人…@Warthel4578:这绝对是正确的做法。使用C++11时,您可以添加
覆盖
。由于下层选民没有留下评论,我猜他们是来自普通的仇恨者。。。