曲径通幽论坛
标题:
使用包含还是私有继承?
[打印本页]
作者:
easy
时间:
2013-12-13 11:10
标题:
使用包含还是私有继承?
Q :使用
包含
还是
私有继承
?
A :包含 和 私有继承都可以建立
has-a
关系。大多数 C++ 程序员倾向于使用“包含”。原因是,“包含” 关系易于理解。在“包含”中,类声明里包含了显示命名对象,代码可以通过名称引用这些对象;而使用“私有继承”,使得关系变得很抽象。其次,继承会引起许多问题,尤其从多个基类继承时,可能需要处理许多问题,如包含同名方法的独立的基类或共享祖先的独立基类。然而,使用“包含“就不太可能遇到这些麻烦。另外,包含能够包括多个同类的子对象。比如,某个类需要 3 个 string 对象,那么可以使用包含声明 3 个独立的 string 成员,而继承只能使用一个这样的对象(当对象都没有名称时,将难以区分)。
然而,私有继承却可以提供比“包含”更多的特性。例如,假设类包含保护成员(可以是数据成员,也可以是成员函数),这样的成员在派生类中是可用的,但在继承层次结构外不可用。如果使用“组合”将这样的类包含在另一个类中,则或者将不是派生类,而是位于继承层次结构之外,因此不能访问保护成员。但通过继承的方式,得到的是派生类,这样是能够访问保护成员的。
另一种需要使用私有继承的情况是,需要重新定义虚函数。派生类可以重新定义虚函数,但包含类不能。使用私有继承,重新定义的函数只能在类中使用,而不是公有的。
一点经验是,通常,应使用“包含”来建立 has-a 关系;如果新类需要访问原有类的保护成员,或需要重新定义虚函数,则应使用私有继承。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2