类之间的关系有composition(has-a),delegation(委托)等.
Composition
构造由内而外,如Container中包含Component,那么Container的构造函数首先调用Conponent的default构造函数,然后才执行自己.
析构由外而内,Container的析构函数首先执行自己,然后调用Component的析构函数.
Adapter设计模式,queue中内含一个deque,就是一种adapter.queue实现的所有功能都是通过转调用deque的相应功能实现的,但是deque还有很多功能未被使用.
Delegation
两个类之间用指针相连,称之为delegation.
1 | // handle/Body: file1为handle,file2为Body |
无论字符串的实现如何变化,都不影响客户端代码.String中的StringRep也可以指向不同的StringRep的实现,如可以指向StringRep的子类.
三个string共享一个字符串hello,所以共享计数n=3表示有三个String对象共享hello.
继承
继承有三种方式:public,private,protected.其中public表示is-a关系.
构造由内而外.Derived的构造函数首先调用Base的default构造函数,然后才执行自己.
析构由外而内.Derived的析构函数首先执行自己,然后才调用Base的析构函数.
函数的继承继承的是调用权.当一个类B以public方式继承另一个类A,那么在类A中所有的public方法在类B中也会变成public,但是当B以private方式继承类A,那么类A中所有的public方法在类B方法中变成private方法.
参考文献
[1]基本聚合和组合聚合:https://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/index.html