C++面向对象
类对象之间三种关系:组合(Composition),继承(Inheritance),委托(Delegation)
组合,是“有一个”(has a)关系
Class A {
...
};
Class B {
A m;
...
};
A有一个B,或者A包含一个B。例如动物园和猴子,可以说动物园有一只猴子。
类B的构造由内而外,先调用A的构造函数,然后是自己,析构由外而内。
继承,是“是一个”(is a)关系,有许多名称,包括派生,子类,扩展。
Class C:public A
{
...
};
C是一个A。例如,动物园里还有其他动物,长颈鹿是一种动物,老虎是一种动物,它们的共性是动物的一般特征。
派生类可以在基类基础上添加功能,还可以完全替换和重写父类的行为,派生类还可以向从基类继承来的属性中添加新属性。
委托,包含有另一个类的指针。
Class D{
A* mp;
...
};
虚函数
Class Shape{
public:
virtual void draw() const=0; //纯虚函数,没有默认定义,子类一定要重新定义它。
virtual void error(const std::string& msg); //虚函数,对它有默认定义,子类可以重新定义它。
int objectID() const; //非虚函数,不希望子类重新定义它。
...
};
class Rectangle:public Shape{...};
class Ellipse:public Shape{...};
观察者模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。它还有两个别名,依赖(Dependents),发布-订阅(Publish-Subsrcibe)。可以举个博客订阅的例子,当博主发表新文章的时候,即博主状态发生了改变,那些订阅的读者就会收到通知,然后进行相应的动作,比如去看文章,或者收藏起来。博主与读者之间存在种一对多的依赖关系。