C++ 继承机制详解:同名成员隐藏与默认函数
继承是面向对象编程(OOP)中实现代码复用的核心手段。它允许我们在保持基类特性的基础上扩展新的方法和属性,从而生成派生类。这种机制体现了由简单到复杂的层次结构,是类设计层面的复用方式。
什么是继承?
假设我们有两个类 Student 和 Teacher,它们都有姓名、地址、电话等公共成员,也有各自独有的成员。如果分别定义,会导致大量重复代码。通过引入一个 Person 基类,将公共部分提取出来,派生类只需关注差异部分,即可避免冗余。
class Person {
public:
void identity() {
cout << "identity()" << _name << endl;
}
protected:
string _name = "张三";
int _age = 18;
string _address;
string _tel;
};
class Student : public Person {
public:
void study() {
cout << "study()" << endl;
}
protected:
int _stuid;
};
继承的定义与访问权限
在 C++ 中,基类(父类)和派生类(子类)的关系通过继承方式定义。主要有三种:public、protected、private。
继承后的访问权限变化遵循以下规则:
- 基类成员的访问权限在派生类中不会变宽,只会变窄或保持不变。
- 使用
class关键字时,默认继承方式是private;使用struct时,默认是public。建议显式写出继承方式。 - 实际开发中通常使用
public继承。protected或private继承会导致成员只能在派生类内部使用,降低了扩展性和维护性。
此外,继承不仅限于普通类,还可以继承类模板。例如用继承实现 stack 容器适配器:
template<class T>
class stack : public std::vector<T> {
:
{
vector<T>::(x);
}
{
vector<T>::();
}
{
vector<T>::();
}
{
vector<T>::();
}
};


