让我们看看来自外部库
的课程 Aclass 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()
?
答案 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)
从抽象基类派生的类也将是抽象的,除非您覆盖派生类中的每个纯虚函数。