优先使用组合:C++编程中的设计选择

需积分: 0 145 下载量 91 浏览量 更新于2024-08-06 收藏 1.29MB PDF 举报
"C++语言编程规范内部公开2012-03-19 - 华为 C++" 本文档是华为技术有限公司内部的技术规范,针对C++编程语言提出了一系列编程标准,旨在提高代码质量、可维护性和可扩展性。其中,重点关注了“用组合代替继承”的原则,这是面向对象设计中的一个重要概念。 继承是C++中实现代码复用的一种机制,分为公共继承(public inheritance)、私有继承(private inheritance)和保护继承(protected inheritance)。公共继承意味着“is-a”关系,派生类具备基类的所有公有和保护成员。纯虚函数继承的是接口,不包含具体实现,而虚函数则继承接口和默认实现。非虚函数则强制继承接口及其实现,不允许派生类修改。然而,过度使用继承可能导致代码复杂度增加,尤其是多层继承和多重继承,还可能造成二义性问题。因此,华为规范建议优先考虑组合(composition)。 组合是一种“has-a”关系,一个类可以包含另一个类的对象作为其成员变量。这种方式灵活性更高,因为它允许在运行时改变对象的关联,且不会暴露基类的实现细节,降低了耦合度。当需要复用已有类的功能时,若能通过组合来实现,应优先选择组合。 此外,规范中还提到析构函数的使用,建议在析构函数中集中释放资源,并在资源释放后将其设为NULL,防止意外的二次释放。这是遵循了资源获取即初始化(RAII,Resource Acquisition Is Initialization)的设计原则,确保资源在生命周期结束后能得到妥善处理。 在继承的两种形式中,接口继承(interface inheritance)只继承成员函数的声明,而实现继承(implementation inheritance)继承了接口和实现。华为建议尽可能避免实现继承,转而使用组合。这样可以更好地封装和控制实现细节,降低变更基类时对派生类的影响。 此文档还涵盖了其他编程规范,如常量的使用、初始化和类型转换、函数的定义和内联等,这些都是为了提升代码质量和可读性。虽然没有给出所有57页的内容,但可以看出华为对于C++编程的严谨态度,以及对最佳实践的重视。