派生类的组合

Composition of derived classes

本文关键字:组合 派生      更新时间:2023-10-16

我有一个关于c++中的组合和继承的问题:

我有一个基类'A'和一个派生类'B' ('B'继承'A'的成员),是否有可能使用'B'作为'A'的组成成员?

至于"A有B成员,B从A派生":实际上,你不能声明这样的事情。如果类A有类型B的成员,则需要在A之前声明B。如果B使用A作为基类,则必须在B之前声明A。

至于组合,如果你想做这样的事情,你可能不得不使用间接(指针,智能指针等)。

class B;
class A {
  B *b;
};
class B : public A {
};

有人可能会说(在c++中)使用指针不是复合;然而,在Java中,所有的对象都是"指针",所以组合是:

class A {
  B b;
}
class B extends A {
}

但是您可以嵌入B*字段。因此,const B&也应该是可能的,并且表现得像B(注意我现在是一个沙盒java程序员)

class B;
class A {
    B& b;
};

顺便说一句,你甚至可能不会在A中嵌入A。