最近在看《C++ primer plus》时,发现了很多之前存在的知识漏洞,故在此查漏补缺一波。废话不多说,直接重点。
继承是C++中极为重要的一部分,是⾯向对象复⽤的重要⼿段。通过继承定义⼀个类,继承是类型之间的关系建模,共享公有的东西,实现各⾃本质不同的东西。
C++中不同的限定修饰符限定了不同的继承关系。
以下是三种不同的继承方式的基类特性和派生类特性
简单总结:
- **基类的私有成员在派⽣类中不能访问;如果⼀些基类成员不想被基类对象直接访问,但需要在派⽣类中能访问,就定义为保护成员。
- public继承是⼀个接口继承,保持is-a原则(出自《C++ primer plus》),每个⽗类可⽤的成员对子类也可用,因为每个子类对象也都是⼀个⽗类对象。
- protetced/private继承是⼀个实现继承,基类的部分成员并未完全成为⼦类接⼜ 的⼀部分,是 has-a 的关系原则。
- 使⽤关键字class时默认的继承⽅式是private,使⽤struct时默认的继承⽅式是 public。**
需要注意的是,不管是哪种继承⽅式,在派⽣类内部都可以访问基类的公有成员和保护成员, 但是基类的私有成员存在但是在⼦类中不可见(不能访问)。
由于public继承具有is-a的关系,每个父类可⽤的成员对子类也可用,因为每个子类对象也都是⼀个子类对象。
因此,子类对象可以赋值给⽗类对象(切割/切片)。但是子类的指针/引⽤不能指向⽗类对象(可以通过强制类型转换完成)。
而父类对象不能赋值给⼦类对象 ,但是父类的指针/引⽤可以指向子类对象。
继承又根据其继承父类数量分为单继承与多继承。
单继承–⼀个子类只有⼀个直接⽗类时称这个继承关系为单继承
多继承–⼀个子类有两个或以上直接⽗类时称这个继承关系为多继承