c++ - 从抽象父类定义子类,继承自抽象父类
问题描述
代码中的情况(希望)很清楚。我们有两个(在这个例子中是纯抽象的,但这不是必需的)类。这可以定义C类吗?指针 c_ptr 会发生什么?我需要在 B 类析构函数中删除它吗?
class C : public B {
private:
public:
C();
~C();
int do();
};
class B : public A {
private:
C *c_ptr;
public:
B(){
c_ptr = new C();
}
~B() {
delete c_ptr;
}
virtual int do() = 0;
};
class A {
private:
public:
A();
~A();
virtual int do() = 0;
};
解决方案
简而言之,不,这是不可能的。
在您的示例中,我们有以下约束:
B
是的孩子A
C
是的孩子是的孩子B
是的孩子A
对于每个超类,也必须创建一个对象。因此,对于 a 的实例化B
,将创建一个A
第一个。
以同样的方式C
构建 aB
将创建A
第一个。
由于 C++ 是一种过程语言,因此在使用它们之前必须了解数据类型和函数。但是,编译器不可能在知道如何构建 aC
之前就知道如何构建 a B
,反之亦然。因此,不可能这样做。
然而,这种多态结构可以通过使用称为前向声明的东西来实现。基本上你告诉编译器有一些 C 类,稍后会指定。Example in CompilerExplorer
推荐阅读
- android - TextView 超出了 ConstraintLayout
- php - 如何正确处理日期和时间?
- go - golang rabbitmq channel.consume SIGSEGV
- r - 无法安装 R 包“data.table”。- 麦克空气
- swift - 如何从 Button ,Swift 中删除图像?
- c - 为什么我的文件在 C 中分叉时即使在有保护的情况下也会执行此标头两次?
- html - 网站无法识别通过 VBA 代码完成的选择
- javascript - 如何在不转换为数组的情况下按另一个对象内的对象的值排序?
- android - 可绘制渐变在预览中看起来不错,但在实际应用中被破坏了
- javascript - 如何使纹理始终面向相机..?