类之间的关系
dependency (use a) 依赖关系
当类Y与类X彼此独立,而类Y是类X成员函数的一个参数,或者X中成员函数的一个局部变量
class X
{
void f1(Y y) { y.foo(); }
void f2(Y &y) { y.foo(); }
void f3(Y *y) { y->foo(); }
void f4(void) { Y y; y.foo(); }
void f5(void) { Y::staticFoo(); }
Y f6(void) { Y y; return y; }
};
assocation(konws a)关联关系
一个类是另一个类的成员变量
class X
{
Y *py_;
X(Y *py):py_(py) {}
void f() { py_->foo(); }
};
Aggregation (has a) 聚合关系
一个类是另一个类的集合或者容器,但被包含的类与容器本身并不具备相同的生命期,也就是容器销毁时,其包含的内容未必。关联(association)与聚合(aggregation)的不同之处在于,关联关系不存在一个明确的容器包含另外一个类。比如汽车和轮胎的关系,就是一种聚合关系,汽车包含着轮胎的集合,汽车的销毁,轮胎仍然可以存在。
聚合关系也是通过成员变量来实现的,但是关联关系所涉及的两个类处于同一个层次上,而聚合关系中,两个类处于不同的层次上,一个代表整体,一个代表部分。
class Car
{
vector<Tyre*> vecTyre_;
};
Composition (has a) 组合关系
组合(composition)是聚合(Aggregation)的增强版。组合和聚合的根本不同在于类与其所持有元素的是否具有相同的生命期,生命期相同是一种组合关系。
class Circle
{
Point center_;
};
Inheritance (is a) 继承/泛化
继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
类模板(Class template)
也就是泛型类
template<class T>
class X
{...};
X<Y> a;