1. C++继承的本质与核心价值
继承是面向对象编程三大特性(封装、继承、多态)中最具革命性的设计。想象你正在开发一个动物园管理系统,所有动物都有共同属性(年龄、体重)和行为(进食、移动)。没有继承时,你需要为每种动物重复编写相同代码:
cpp复制class Lion {
int age;
double weight;
void eat() { /*...*/ }
void move() { /*...*/ }
void roar() { /*...*/ }
};
class Elephant {
int age; // 重复字段
double weight; // 重复字段
void eat() { /*...*/ } // 重复方法
void move() { /*...*/ } // 重复方法
void trumpet() { /*...*/ }
};
继承通过"is-a"关系解决这个问题:
cpp复制class Animal {
protected:
int age;
double weight;
public:
void eat() { /*...*/ }
virtual void move() = 0; // 纯虚函数
};
class Lion : public Animal {
public:
void move() override { /* 狮子移动方式 */ }
void roar() { /*...*/ }
};
关键理解:派生类对象内存中包含完整的基类子对象。当创建Lion实例时,内存布局依次是Animal子对象(age+weight)和Lion新增成员。
2. 三种继承方式深度解析
2.1 public继承:最常用的继承方式
cpp复制class Base {
public:
int x;
protected:
int y;
private:
int z;
};
class Derived : public Base {
// x仍为public
// y仍为protected
// z不可见(但存在于内存中)
};
典型应用场景:
- 实现接口继承(派生类"是一个"基类)
- STL容器继承体系(如std::unordered_map继承std::_Hashtable)
2.2 protected继承:罕见的中间态
cpp复制class Derived : protected Base {
// x变为protected
// y仍为protected
// z不可见
};
实际工程中主要用于:
- 限制外部访问但允许进一步派生
- 某些设计模式中的中间层类
2.3 private继承:实现继承的利器
cpp复制class De
