C++派生类详解:继承与软件复用

需积分: 9 5 下载量 180 浏览量 更新于2024-08-19 收藏 150KB PPT 举报
本文介绍了派生类的声明以及在C++中的应用,重点在于理解派生类的概念、继承方式以及派生类对基类的扩充。派生类是面向对象编程中的一个重要概念,允许我们基于已有的类(基类)创建新的类(派生类),实现软件复用和代码的模块化。 ### 一、派生类的声明 派生类的声明通常采用以下格式: ```cpp class 派生类名:派生方式 基类名 { 派生类中的新成员 } ``` 这里的派生方式可以是`public`、`protected`或`private`,分别代表公有继承、保护继承和私有继承。默认情况下,如果未指定派生方式,C++会认为是私有继承。不同的继承方式决定了基类成员在派生类中的可见性和访问权限。 ### 二、继承方式的作用 1. **公有继承 (public)**:基类的公有成员和保护成员在派生类中仍然是公有和保护的,派生类的对象可以直接访问它们。这有助于实现"is-a"关系,例如,"狗 is a 动物"。 2. **私有继承 (private)**:基类的所有成员在派生类中变为私有,派生类的外部无法直接访问,仅限于派生类内部使用。这通常用于实现"has-a"关系,例如,"汽车 has a 引擎"。 3. **保护继承 (protected)**:基类的公有和保护成员在派生类中变为保护成员,只有派生类及其子类可以访问。这提供了一种介于公有和私有继承之间的选择,限制了对基类成员的访问,但比私有继承更为灵活。 ### 三、派生类的扩充 派生类不仅可以继承基类的成员,还可以添加新的数据成员、成员函数,甚至重定义基类的已有成员。这种机制允许我们在不改变基类原有功能的基础上,扩展或修改基类的行为,以满足特定的需求。 1. **增加新的数据成员**:派生类可以包含基类没有的额外数据,以增强其功能。 2. **增加新的成员函数**:可以添加新的操作或行为,这些在基类中可能不存在。 3. **重定义已有成员函数**:通过覆盖(override)基类的虚函数,派生类可以实现不同的行为,这是多态性的重要体现。 ### 四、程序示例 以下是一个简单的例子,展示了派生类如何实现对象复用和继承: ```cpp // 点类 class Point { private: int x, y; public: Point(int xx = 0, int yy = 0) { x = xx; y = yy; } void show_point() { cout << x << "\t" << y << endl; } }; // 圆类,继承自点类 class Circle : public Point { private: int r; public: Circle(int xx, int yy, int rr) : Point(xx, yy) { r = rr; } void show_circle() { show_point(); // 调用基类的函数 cout << r << endl; } }; int main() { Circle c(5, 10, 20); c.show_circle(); } ``` 在这个例子中,`Circle`类通过`public`继承自`Point`类,实现了"圆 is a 点"的关系,并增加了表示半径的成员变量`r`和显示圆的相关函数。 通过这种方式,派生类不仅能够复用基类的代码,还能根据需要进行扩展,实现更复杂的功能。这种继承机制使得代码结构更加清晰,提高了代码的可维护性和重用性。