C++纯虚拟方法由其他类实现
C++ pure virtual method implementation by other class
让我们看看来自外部库的类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
必须覆盖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
};
从抽象基类派生的类也将是抽象的,除非重写派生类中的每个纯虚拟函数。
相关文章:
- 如何制作 cmakelists.txt编译使用在其他地方声明和实现的函数和类的 CPP
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- 标题实现取代了其他实现
- 实现文件只能识别其他类的远期声明
- 有没有办法实现从 c++ 中其他抽象类多重继承的抽象类?
- 如何从实现与其他接口共享的接口的类继承
- 允许其他基类实现虚拟函数
- 除了堆栈和堆模型之外,还为C++实现了哪些其他形式的自动和动态存储
- 在其他类中实现访问类
- 在其他类中实现std ::类似阵列的构造函数
- 如何在无法访问 vblank 的情况下实现平均 60(或 30,或其他数字)FPS?
- GCC 4.4 不实现 C++11 范围循环.它还支持哪些其他范围循环语法
- 函子 - 它们相对于未实现运算符的其他类具有什么能力 ( )
- C++ std::random 如何实现其他发行版
- C++如何用模板指定或其他方式实现
- 在其他实现文件中包含实现文件有什么用?
- 头文件应该包括其他头文件,还是由实现来决定
- float4::set_wxy(以及其他set-swizzle操作)的更好的SSE2实现
- std::vector 实现是否使用内部数组或链表或其他
- 如何实现指向其他乘法类型向量的C++向量