首页 > 解决方案 > 从抽象父类定义子类,继承自抽象父类

问题描述

代码中的情况(希望)很清楚。我们有两个(在这个例子中是纯抽象的,但这不是必需的)类。这可以定义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;
};

标签: c++inheritance

解决方案


简而言之,不,这是不可能的。

在您的示例中,我们有以下约束:

B是的孩子A
C是的孩子是的孩子B是的孩子A

对于每个超类,也必须创建一个对象。因此,对于 a 的实例化B,将创建一个A第一个。

以同样的方式C构建 aB将创建A第一个。

由于 C++ 是一种过程语言,因此在使用它们之前必须了解数据类型和函数。但是,编译器不可能在知道如何构建 aC之前就知道如何构建 a B,反之亦然。因此,不可能这样做。

然而,这种多态结构可以通过使用称为前向声明的东西来实现。基本上你告诉编译器有一些 C 类,稍后会指定。Example in CompilerExplorer


推荐阅读