C++ 继承完全指南:构建可复用的强大类层次
C++ 继承完全指南
本教程通过实例系统讲解 C++ 继承机制,包括基类/派生类关系、protected 成员、访问模式、函数重写及多重继承基础。
继承是 C++ 面向对象编程的核心特性之一。它允许从现有类(基类/父类)创建新类(派生类/子类)。
派生类继承基类的特性,并可添加自身特有功能。例如:
class Animal {
// eat() 函数
// sleep() 函数
};
class Dog : public Animal {
// bark() 函数
};
Dog 从 Animal 派生。因为继承关系,Dog 可访问 Animal 的成员。

注意继承时使用的 public 关键字:
class Dog : public Animal {...};
也可用 private 或 protected 继承,稍后详述差异。
is-a 关系
继承体现is-a 关系("是一种"关系)。仅当两个类之间存在 is-a 关系时才应使用继承。
- Car 是 Vehicle
- Orange 是 Fruit
- Surgeon 是 Doctor
- Dog 是 Animal
示例 1:C++ 继承简单示例
// C++ 继承演示程序
#include <iostream>
using namespace std;
// 基类
class Animal {
public:
void eat() {
cout << "I can eat!" << endl;
}
void sleep() {
cout << "I can sleep!" << endl;
}
};
// 派生类
class Dog : public Animal {
public:
void bark() {
cout << "I can bark! Woof woof!!" << endl;
}
};
int main() {
Dog dog1;
// 调用基类成员
dog1.eat();
dog1.sleep();
// 调用派生类成员
dog1.bark();
return 0;
}
输出
I can eat! I can sleep! I can bark! Woof woof!!
派生类对象 dog1 可访问基类 Animal 的成员,因为 Dog 继承自 Animal。
C++ protected 成员
访问修饰符 protected 在继承中尤为重要。
与 private 类似,protected 成员在类外不可访问。但派生类和友元类/函数可访问。
当我们希望隐藏类数据,但允许派生类继承访问时,需用 protected。
详细内容请参考 C++ 访问修饰符教程。
示例 2:protected 成员演示
// protected 成员演示
#include <iostream>
#include <string>
using namespace std;
class Animal {
private:
string color;
protected:
string type;
public:
void eat() { cout << "I can eat!" << endl; }
void sleep() { cout << "I can sleep!" << endl; }
void setColor(string clr) { color = clr; }
string getColor() { return color; }
};
class Dog : public Animal {
public:
void setType(string tp) { type = tp; }
void displayInfo(string c) {
cout << "I am a " << type << endl;
cout << "My color is " << c << endl;
}
void bark() { cout << "I can bark! Woof woof!!" << endl; }
};
int main() {
Dog dog1;
dog1.eat();
dog1.sleep();
dog1.setColor("black");
dog1.bark();
dog1.setType("mammal");
dog1.displayInfo(dog1.getColor());
return 0;
}
输出
I can eat! I can sleep! I can bark! Woof woof!! I am a mammal My color is black
protected 变量 type 可在派生类 Dog 中通过 setType() 访问。而 private 变量 color 无法在 Dog 中直接访问:
class Dog : public Animal {
public:
void setColor(string clr) {
// 错误:Animal::color 不可访问
color = clr;
}
};
同时,protected 也隐藏数据,外部对象无法直接访问:
// 错误:Animal::type 不可访问
dog1.type = "mammal";
C++ 继承访问模式
继承时可用 public、private、protected 三种模式:
class Animal { /* ... */ };
class Dog : private Animal { /* ... */ };
class Cat : protected Animal { /* ... */ };
这三种方式称为访问模式,效果如下:
- public:基类成员在派生类中保持原访问级别。
- private:基类所有成员在派生类中变为
private。 - protected:基类
public和protected成员在派生类中变为protected。
基类 private 成员在派生类中始终不可访问。
详细内容请访问:C++ public、private、protected 继承教程。
继承中的成员函数重写
若基类与派生类拥有同名同参数的成员函数,通过派生类对象调用时,会调用派生类版本,即派生类函数重写基类函数。
详细内容请参考:C++ 函数重写教程。
推荐阅读: C++ 多重继承
C语言
- C# static 关键字:静态变量、方法与类完全掌握
- 理解 C# 嵌套类:定义、访问与继承实战
- 掌握 C++ 运算符:六大类型全解析与实战示例
- C++类与对象:面向对象编程实战指南
- C++ 三种继承方式深度解析:public、protected 与 private
- C++ 类模板实战指南:编写灵活的类型无关代码
- C++存储类别全解析:auto/register/static/extern/mutable作用域与生命周期
- C++多态实战指南:虚函数、动态绑定与纯虚函数
- C++数据抽象实战:接口与实现分离的设计艺术
- C++数据封装:守护代码安全的核心机制
- C++接口编程:抽象类与纯虚函数实现规范契约
- 精通 Python 继承:概念、语法与实战示例