什么是最好的继承或使用公共对象?

时间:2012-03-07 07:11:08

标签: c++ inheritance

这是我的疑问: 我有两个A和B班。 我可以写:

class A: public B  {....}

所以an_instance_of_A可以使用B方法。

但我也可以写:

class A {
public:
B instance_B;
}

因此an_instance_of_A可以使用instance_B方法。 (即B方法)。

我也可以这样做。 什么是最好的?什么是快速编译?它是一样的吗? 感谢。

3 个答案:

答案 0 :(得分:2)

当存在“is-a”关系时

继承。例如在vehiclecar之间。

当存在“包含”或“由...组成”类型的实例时,您使用数据成员。例如class schoolclass teacherclass student

组成

答案 1 :(得分:0)

公共继承描述了 is-a 关系。也就是说,你可以用B做任何事情,你也可以用A.

公共对象是完全不同的东西,并不常见。如果A可能有多个B,那么您不能使用继承,因此请使用组合(成员对象)。如果他们应该公开或不公开取决于A和B以及您希望如何使用它们。

编辑,似乎这个问题是一个非常接近的匹配:

Prefer composition over inheritance?

正如James所说,在特殊情况下,在继承或组合之间进行选择时,编译时间不应该是一个高优先级。

答案 2 :(得分:0)

如前所述,只有当A也是B(例如工人也是人)时,才应使用公共继承。

只要不公开,在类中包含对象实例就更适合测试和封装。除POD外,请不要将会员公开为公开会员。这会产生一些问题(例如某人可能很容易破坏你班级的完整性)