能,派生类最核心用途是添加新成员以扩展功能;可自由添加各访问级别的成员变量和函数,新增变量追加至内存布局末尾,函数按限定符可见;同名成员会隐藏基类版本;构造函数不自动继承,需显式调用或声明;对象大小含基类、新增成员及对齐填充。

能,而且这是派生类最核心的用途之一。
派生类必须添加自己的成员才有实际意义
单纯继承基类而不扩展,相当于造了个“镜像类”,既没新增能力也没定制行为。C++ 允许在派生类中自由添加:public、protected、private 成员变量和成员函数,这些都属于派生类专属部分。
- 新增成员变量(如
int rage;)会追加到对象内存布局的基类子对象之后 - 新增成员函数(如
void smash();)只对该派生类及其进一步派生类可见(按访问限定符) - 即使不加任何新成员,语法上合法,但几乎无工程价值
同名成员在派生类中会隐藏基类成员
如果派生类定义了与基类同名的成员(变量或函数),默认行为是“隐藏”而非“重载”或“覆盖”。这意味着通过派生类对象或指针调用该名字时,只会找到派生类版本。
-
Base::func()仍可显式调用基类版本,但需作用域解析 - 函数签名不同也不构成重载——派生类作用域会先屏蔽整个基类同名符号
- 若想保留基类接口并扩展,应避免同名,或用
using Base::func;引入
构造函数不能被继承,必须手动定义
派生类没有自动继承基类构造函数的机制(C++11 后支持 using Base::Base; 继承构造函数,但仍是显式声明,不是自动)。
- 派生类构造函数必须显式调用基类构造函数(在初始化列表中)
- 若基类无默认构造函数,而派生类构造函数又没显式调用,则编译失败
- 新增成员变量若无默认构造函数,也必须在初始化列表中初始化
真正容易被忽略的是内存布局细节:派生类对象大小 = 基类子对象大小 + 新增成员大小 + 对齐填充。哪怕你只加了一个 char,也可能因对齐导致整体尺寸跳变,调试时观察 sizeof(Derived) 往往比预期大。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











