• C++Review2_代码复用


    C++的一个重要目的是实现代码重用

    有哪些机制可以实现这个目标呢?

      1、公有继承——is a的关系

      2、包含 (新的类包含另一个类的对象)——has a的关系

      3、私有继承/保护继承——has a的关系

      4、多重继承

      5、类模板

    ====================================================

    公有继承

    ====================================================

    包含

    每当某个类包含另一个类的对象作为其成员变量之一时,就会出现类组合。组合在两个类之间建立了(Has-a)的关系。

    这种方法称为包含、组合或层次化。

    接口与实现的概念

    获得接口是is-a关系的组成部分。

    而使用组合,类可以获得实现,但不能获得接口。不继承接口是has-a关系的组成部分。

    对于has-a关系而言,类对象不能获得包含对象的接口是一件好事。

    C++_代码重用2 包含对象的类:https://www.cnblogs.com/grooovvve/p/10422232.html

    ====================================================

    私有继承/保护继承

    第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象。

    第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员。

    私有继承的含义:私有继承意味着 "用...来实现"。

    如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系。

    因而,私有继承纯粹是一种实现技术。

    私有继承意味着只是继承实现,接口会被忽略。如果D私有继承于B,就是说D对象在实现中用到了B对象,仅此而已
    私有继承在软件 "设计" 过程中毫无意义,只是在软件 "实现" 时才有用。

    所以,私有继承也可以用来实现has-a关系

    使用包含还是私有继承?

      大多数C++程序员倾向于使用包含。首先,它易于理解。类声明中包含表示被包含类的显式命名对象,代码可以通过名称引用这些对象,而使用继承将使关系更抽象。其次,继承会引起很多问题,尤其从多个基类继承时,可能必须处理很多问题,如包含同名方法的独立的基类或共享祖先的独立基类。总之,实用包含不太可能遇到这样的麻烦。另外,包含能够包括多个同类的子对象,而继承只能使用一个这样的对象。

      然而,私有继承所提供的特性确实比包含多。例如,假设类包含保护成员(可以是数据成员,也可以是成员函数),则这样的成员在派生类中是可用的,但在继承层次结构外是不可用的。如果使用组合将这样的类包含在另一个类中,则后者将不是派生类,而是位于继承层次结构之外,因此不能访问保护成员。但通过继承得到的将是派生类,因此它能够访问保护成员。

      另一种需要使用私有继承的情况是需要重新定义虚函数。派生类可以重新定义虚函数,但包含类不能。使用私有继承,重新定义的函数将只能在类中使用,而不是公有的。

    ====================================================

    多重继承

    ====================================================

    类模板

    ====================================================

    相关链接:

    C++代码重用:https://www.cnblogs.com/mupiaomiao/p/4662424.html

  • 相关阅读:
    导出excel 文件
    导入excel
    django 中自定义过滤器
    机器学习&深度学习资料收集
    USACO Section 1.4 Arithmetic Progressions 解题报告
    POJ-1062 昂贵的聘礼 解题报告
    USACO Section 1.3 Ski Course Design 解题报告
    USACO Section 1.3 Wormholes 解题报告
    USACO Section 1.3 Combination Lock 解题报告
    USACO Section 1.3 Prime Cryptarithm 解题报告
  • 原文地址:https://www.cnblogs.com/grooovvve/p/11198409.html
Copyright © 2020-2023  润新知