面向对象的编程
类之间的关系有复合(composition)、委托(aggregation)和继承(extension) 3种.
继承
我里头里面有某种东西;
queue里面的功能有deque来实现;
A拥有B;A的所有功能都有B来实现;
Adapter(适配器);queue,用别的来实现
内存角度
构造和析构函数顺序
委托(Delegation)
指针指向右边的类;
by reference (指针也叫)
has a :有外部就有内部,一起的
委托:不同步。
左边指针可以指向不同的类,实现不同的功能:
Handle/Body:point to implemention(pimpl)
委托将类的定义与类的实现分隔开来,也被称为编译防火墙.
继承(Inheritance)
继承方式:public、private、protected
继承与虚函数搭配最有价值
构造函数的析构函数一定是虚函数
构造由内而外:是先调用基类的默认构造函数,然后在调用派生类的构造函数;
析构由外而内:首先调用自己的析构函数,然后才调用基类的析构函数;
虚函数和多态
数据继承下来成为内存的一部分;
函数的继承继承的调用权;
override(覆写,虚函数)
纯虚函数必须在子类中重新定义
Template Method
通过子类对象调用父类的函数
继承和复合关系下的构造和析构
上面的子类组合继承父类的构造顺序是:父类、组合类、子类;
下面的父类组合构造顺序为:组合类、父类、子类;
委托加上继承关系
观察者-设计者模式
储存数据-----表现数据;
数据有变化,表现的必须也同时变化;
左边有很多的右边
Composite:
add函数不能写为纯虚函数,因为primitive不能覆写add函数;
Prototype
需要一个继承体系;创建未来才能出现的体系;
问题:我现在要创建未来的对象; 派生类自己创建要被基类所看见
LandSatImage:_LAST 静态对象 LandSatImage
'-'负号代表为私有构造函数
’#‘为protected;
’+‘为public;
私有构造函数调用addPrototype(把得到的指针放到自己的父类的容器中去prorotypes)挂到父类;
clone函数:通过调用父类里面的原型,返回自己,
如果没有原型,clone为静态函数,不需要对象就能调用,静态函数的调用一定要知道类名称,但是不知道未来的类名;
子类的开销比较大
24,25行说明静态成员变量必须在类外定义