一、继承的概念及定义
继承是面向对象程序设计实现代码复用的重要手段。它允许我们在保持原有类特性的基础上进行扩展,产生新的类,即派生类。这体现了面向对象程序设计的层次结构。
定义格式上,以 class Student : public Person 为例,Person 是基类(父类),Student 是派生类(子类),public 是继承方式。继承方式有 public、protected 和 private 三种,不同继承方式会改变基类成员在派生类中的访问权限。

例如,基类的 public 成员在 public 继承下,在派生类中仍是 public 成员;但在 protected 继承下,就变为派生类的 protected 成员。
二、基类和派生类对象赋值转换
派生类对象和基类对象之间存在特殊的赋值转换关系。派生类对象可以赋值给基类的对象、指针或引用,这就像把派生类中属于基类的那部分'切'出来进行赋值,形象地称为切片。例如:
Student sobj;
Person pobj = sobj;
Person* pp = &sobj;
Person& rp = sobj;

然而,基类对象不能直接赋值给派生类对象。不过,基类的指针或引用可以通过强制类型转换赋值给派生类的指针或引用,但这种转换需要谨慎。若基类是多态类型,可使用 RTTI(运行时类型信息)的 dynamic_cast 来确保安全转换。
在 C++ 继承体系中,向上转型和向下转型是核心概念:
- 向上转型(Upcast):子类指针/引用 → 父类指针/引用。这是天然合法、无风险的转换,也是编码中最常用的转型方式。仅需满足公有继承(public inheritance),编译器自动支持,不会出现未定义行为。
- 向下转型(Downcast):父类指针/引用 → 子类指针/引用。这是逆向转换,必须手动强制转换,且存在安全风险。如果父类指针原本指向的是父类对象,强行向下转型会触发未定义行为。安全的向下转型要求原对象为子类,或使用
dynamic_cast进行运行时检查。
| 转型类型 | 转换方向 | 安全性 | 语法要求 | 核心场景 |
|---|---|---|---|---|
| 向上转型 | 子类→父类 | 绝对安全 | 公有继承,自动转换 | 多态、函数传参、接口统一 |
| 向下转型 | 父类→子类 | 有风险 | 需手动强转,原对象为子类 | 调用子类独有成员 |
如果 Person&p=s;,实际上是将子类对象作为父类的别名。赋值、指针操作都涉及兼容切割。




















