1.类与类之间的三种关系:1)Inheritance(继承) 2)Composition(复合) 3)Delegation(委托)
2.Composition复合关系,可理解为has a
复合关系下的构造函数:
从内而外,Container的构造函数先调用Component的default构造函数,再执行自己
Container::Container(...):Component() {};
复合关系下的构造函数:
从外而内,Container的析构函数先执行自己,然后再调用Component的析构函数
Container::~Container(...){ ... ~Component() };
PS:可理解为脱衣服跟穿衣服,构造是穿衣服,先穿里面的再穿外面的,析构是脱衣服,先脱外面的再穿外面的
3.Delegation委托关系:Composition by reference
4.Delegation继承关系,可理解为is a
PS:如苹果与水果的关系,苹果是一种水果
继承关系下的构造函数:
从内而外,Derived的构造函数先调用Base的default构造函数,再执行自己
Derived::Derived(...):Base() {};
继承关系下的构造函数:
从外而内,Derived的析构函数先执行自己,然后再调用Base的析构函数
Derived::~Derived(...){ ... ~Base() };
PS:与复合关系一样
5.Inheritance with virtual function
not-virtual function:不希望derived class 重新去定义,保持这个函数不变
virtual function:derived class可以重新定义,但其有默认值,所以也可以不重新定义
pure virtual function:derived class必须重新定义,因为不存在默认定义
6.Composite:Inheritance+Composition关系
继承复合关系下的构造函数:
从内而外,Derived的构造函数先调用Base的default构造函数,再执行自己
Derived::Derived(...):Base() , Component() {...};
继承复合关系下的构造函数:
从外而内,Derived的析构函数先执行自己,然后再调用Base的析构函数
Derived::~Derived(...){ ... ~Componet() , ~Base() };
7.创建未来才会出现的子类:Delegation+Inheritance(Prototype)
网友评论