来考虑下两个类之间如下的关系:
1. “IS-A”: 描述两个类之间,其中一个类A属于另一个类B。类A出现的地方,都可以替换成类B,而不会出现问题,遵循LSP准则。这种情况下,两个类之间的关系就是子类和父类的关系,并且子类是public继承自父类的。
2. “IMPLEMENTED-IN-TERMS-OF”:描述两个类之间,其中一个类可以藉由另一个类的一些功能来实现。这种情况下,两个类之间的关系最好用包含的关系来组合。当然也可以使用非public继承来实现,但这种实现方式一般来说是不易采用的,只有当一些特殊情况下, 包含关系达不到某些特殊要求时,才利用这种继承。一些特殊情况如下:
(1). 我们需要重写一个虚函数。
(2). 我们需要对protected属性的成员具有访问权限。
(3). We need to construct the used object before, or destroy it after, another base subobject.
(4). We need to share a common virtual base class or overridd the construction of a virtual base class.
(5). 我们可以从’empty base class optimization’获利。也就是说当我们所用的类没有数据成员时,我们把当前类private继承自此类时,既可以利用此类的代码,又可以节省空间,因为继承是不占用空间的,而把它当做一个成员生命时,哪怕这个类没有数据成员,也要占据空间。
C++ Exceptinal 类之间的关系
最新推荐文章于 2024-07-14 13:39:50 发布