我对C ++中的组合和继承有疑问:
我有一个基类'A'
和派生类'B'
('B'
从'A'
继承成员),是否可以使用'B'
作为成员'A'
的构成?
答案 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.