条款32:确定你的public继承塑模出is-a关系
- public inheritance 意味“is-a的关系”
- 如果令class A以public形式继承class B,则意味着每一个类型为A的对象同时也是一个类型为B的对象,反之则不成立。也意味着适用于class B身上的每一件事情一定也适应于class A上
条款33:避免遮掩继承而来的名称
- 适应情况:在base classes中的某个函数有几种overload类型,在derived classes中要对base classes中某一个重载函数进行override,此时会覆盖base classes中所有该重载函数
class CBase
{
void f1();
void f1(int);
}
class CDerived : public CBase
{
void f1(int);
}
CDerived d;
d.f1(3); //ok, 调用CDerived:void f1(int)
d.f1(); //错误!因为CDerived:f1()遮掩了CBase:f1()
- derived classes内的名称会遮掩base classes内的名称
- 为了让遮掩的名称再见天日,可使用using 声明式或转交函数
class CDerived : public CBase
{
using CBase:f1;
void f1(int);
}
CDerived d;
d.f1(3); //ok, 调用CDerived:void f1(int)
d.f1(); //ok, 调用CBase:void f1()