派生类的组成

时间:2014-07-09 06:51:37

标签: c++ class oop inheritance composition

我对C ++中的组合和继承有疑问:

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

2 个答案:

答案 0 :(得分:1)

关于“A有B成员,B来自A”:实际上,你不能宣布这样的事情。如果A类具有B类成员,那么B需要在A之前声明。如果B使用A作为基数,则必须在B之前声明A.

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

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

有人可能认为(在C ++中)使用指针不是组合;但是,在Java中,所有对象都是“指针”,因此组合是:

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

答案 1 :(得分:-1)

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

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

顺便说一下,你甚至可能没有在A中嵌入A.