继承的概念及定义
继承(Inheritance)是面向对象编程中实现代码复用的核心手段。它允许在已有类的基础上扩展新特性,添加成员函数和属性,从而生成新的类。原来的类称为基类(父类),新类称为派生类(子类)。相比函数层次的复用,继承实现了类设计层面的复用,有助于构建清晰的层次结构。
1.1 继承的定义格式
继承方式有三种:public、protected 和 private。这与访问限定符类似,但作用范围不同。

1.2 成员访问权限的变化
继承方式会改变基类成员在派生类中的可见性。具体规则如下:


关键规则:
- 私有成员不可见:基类的
private成员无论以何种方式继承,在派生类中都是不可见的。虽然它们被物理继承了,但语法上禁止直接访问。如果需要在派生类中使用,通常通过基类的公有接口暴露。 - 保护成员:若基类成员不希望被类外直接访问,但需在派生类中访问,应定义为
protected。 - 访问权限计算:派生类中成员的最终访问权限 = Min(基类成员访问限定符,继承方式)。顺序为 public > protected > private。
- 默认继承方式:使用
class关键字时默认为 private 继承,使用struct时默认为 public 继承。实际开发中建议显式指定继承方式。
注意:实际应用中几乎都使用 public 继承。protected/private 继承会导致成员只能在派生类内部使用,扩展性和维护性较差,不推荐使用。
示例:继承与访问控制
class Person {
public:
void identity() { /* ... */ }
// 提供公有接口访问私有成员
void func() { ++_age; }
protected:
string _name = ;
string _address;
string _tel;
:
_age = ;
};
: Person {
:
{
_name = ;
();
}
:
_stuid;
};
{
Student s;
s.();
s.();
;
}




