C++ 从从抽象父类继承的抽象父类定义子类

C++ 从从抽象父类继承的抽象父类定义子类,c++,inheritance,C++,Inheritance,通过代码,情况(希望)是清楚的。我们有两个(在本例中为纯抽象类,但这不是必需的)类。这可以定义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(); }

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

与a
C
相同,将构造一个
B
,它将首先创建一个
a

<>作为C++语言,数据类型和函数在使用之前必须知道。但是,编译器不可能在知道如何构建
B
之前就知道如何构建
C
,反之亦然。因此,不可能这样做


然而,这种多态性结构可以通过使用所谓的前向声明来实现。基本上,您告诉编译器有一些C类,稍后将指定它们

我建议使用一些基本调试,例如在
ctor
s和
dtor
s中打印语句。然后依次实例化
A
、A
B
和A
C
,并向自己解释为什么每次调用都会发生每个
C
都会有一个
C*C\u ptr
,它也会有另一个
C*
,它会有另一个
C*
…也许你的意图是让C\u ptr指向C实例,而不是实例化一个新的C()?非工作代码不擅长解释东西。你实际上想用这段代码实现什么?你发现了一个问题,每次C被实例化时,都会创建一个B的实例,它会再次实例化C,以此类推。