程序员C++

C++类与类之间的关系

2017-02-08  本文已影响0人  alex_zhou

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

组合关系,表示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. 父类的析构函数一定设计成是虚函数。
构造和析构

三个非常重要的函数

  • 非虚函数: 不希望子类重新定义
  • 虚函数:希望子类重新定义,并且自己有默认定义
  • 纯虚函数:子类一定要重新定义,自己没默认定义
虚函数

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

子类调用父类的函数
上一篇下一篇

猜你喜欢

热点阅读