Effective-C++
C++
继承
虚函数
对象组合
子类继承了父类的实现,而没有继承任何接口。 private继承和对象组合类似,都可以表示"is-implemented-in-terms-with"的关系。但对象组合往往比继承提供更大的灵活性。
Effective-C++
C++
对象组合
继承
一个类型包含另一个类型的对象时,我们这两个类型之间是组合关系。组合是比继承更加灵活的软件复用方法。
Effective-C++
C++
动态绑定
虚函数
默认参数
因为虽然虚函数的是动态绑定的,但默认参数是静态绑定的。只有动态绑定的东西才应该被重写。
Effective-C++
C++
虚函数
继承
名称隐藏
Never redefine an inherited non-virtual function.
Effective-C++
C++
策略模式
模板方法
虚函数
函数指针
非虚接口范式(NVI idiom)可以实现模板方法设计模式。用函数指针代替虚函数,可以实现策略模式。用function代替函数指针,可以支持所有兼容目标函数签名的可调用对象。用另一个类层级中的虚函数来提供策略,是策略模式的惯例实现。
Effective-C++
C++
接口
继承
实现
当你public继承一个类时,接口是一定会被继承的,你可以选择子类是否应当继承实现。不继承实现,只继承方法接口:纯虚函数。继承方法接口,以及默认的实现:虚函数。继承方法接口,以及强制的实现:普通函数。
Effective-C++
C++
继承
作用域
名称隐藏
转发函数
子类中的名称会隐藏父类中所有同名的属性。public继承表示这"is-a"的关系,应该避免这样做。使用using声明或者转发函数可以使父类名称再次可见。