C++ 从从抽象父类继承的抽象父类定义子类
通过代码,情况(希望)是清楚的。我们有两个(在本例中为纯抽象类,但这不是必需的)类。这可以定义C类吗?指针c_ptr会发生什么变化?我需要在类B析构函数中删除它吗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(); }
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的子级
对于每个超类,也必须创建一个对象。因此,对于aB
的实例化,将首先创建一个a
与aC
相同,将构造一个B
,它将首先创建一个a
<>作为C++语言,数据类型和函数在使用之前必须知道。但是,编译器不可能在知道如何构建B
之前就知道如何构建C
,反之亦然。因此,不可能这样做
然而,这种多态性结构可以通过使用所谓的前向声明来实现。基本上,您告诉编译器有一些C类,稍后将指定它们 我建议使用一些基本调试,例如在
ctor
s和dtor
s中打印语句。然后依次实例化A
、AB
和AC
,并向自己解释为什么每次调用都会发生每个C
都会有一个C*C\u ptr
,它也会有另一个C*
,它会有另一个C*
…也许你的意图是让C\u ptr指向C实例,而不是实例化一个新的C()?非工作代码不擅长解释东西。你实际上想用这段代码实现什么?你发现了一个问题,每次C被实例化时,都会创建一个B的实例,它会再次实例化C,以此类推。