美文网首页程序员C++
C++类与类之间的关系

C++类与类之间的关系

作者: alex_zhou | 来源:发表于2017-02-08 16:59 被阅读0次

    本文预览:
    OOP(面向对象编程)不是只有继承这一种关系,还包括组合和委托,虽然这两种关系非常简单,委托的另一个别名叫做Composition by reference,两者在形式上是非常相似的。

    • 组合(Composition)
    • 委托(Delagation)
    • 继承(Inheritance)
    • 继承下的构造和析构
    • 继承与虚函数
    • 虚函数的重要应用 Template Method

    组合关系,表示has-a

    • deque是queue的成员,queue和deque是组合关系。组合关系的类大小的计算:
    组合关系类大小的计算
    • 组合关系的构造与析构
      构造函数顺序是先构造component,再构造自己;
      析构函数刚好相反,先析构自己,然后在析构component。
    组合.png

    委托(Delagation), Composition by reference

    类里面明明是个指针,非要写成是 by reference, 只是个叫法的问题吧,c++好像很少用 by pointer的说法,reference尤其是参数传递和返回值的时候最常用。

    String现在的实现完全交付给StringRep来实现,并且,不像Composition那样,生命周期是一致的,现在String和StringRep的生命周期就不再一致。这种设计的一个用处在于,String对外提供的接口使用是不变的,但是内部实现是可以更换的;还有引入reference counting,效率岂不是比起来char*快更多倍,尤其是在不需要改变的字符串常亮。

    委托的典型设计

    继承(Inheritance),表示 is-a

    继承是面向对象编程的核心部分,从内存的角度上讲,子类拥有父类的成员变量,对于成员函数来说,继承代表子类拥有函数的调用权

    • 继承的语法
    继承
    • 继承下的构造和析构
      有两点是需要注意的吧:
    1. 构造和析构的顺序,这些都是编译器自动调用的,红色部分标记的位置;
    2. 父类的析构函数一定设计成是虚函数。
    构造和析构
    • 继承和虚函数

    三个非常重要的函数

    • 非虚函数: 不希望子类重新定义
    • 虚函数:希望子类重新定义,并且自己有默认定义
    • 纯虚函数:子类一定要重新定义,自己没默认定义
    虚函数
    • 虚函数最常见且重要的应用领域:Template Method

    子类调用父类的函数,父类延缓实现Serialize()方法,交由子类来实现,在调用的时候,执行子类的方法。
    Template Method 常常用在框架的设计,具体实现由谁来写都是一样的,但是必须按照这种框架来实现。

    子类调用父类的函数

    相关文章

      网友评论

        本文标题:C++类与类之间的关系

        本文链接:https://www.haomeiwen.com/subject/tquvittx.html