C++继承与多态:代码复用和类的派生
需积分: 3 156 浏览量
更新于2024-08-19
收藏 270KB PPT 举报
"C++继承与多态的概念及应用"
在C++编程中,继承和多态是面向对象设计的重要概念,它们提供了代码复用和扩展的能力,使得程序设计更加灵活和高效。
首先,继承(inheritance)是面向对象编程的一个核心特性。它允许一个类(派生类)从另一个类(基类)中获取属性和行为,从而实现代码的复用。继承保持了已有类的特性,并在此基础上构建新类,这个过程被称为派生。基类通常包含了通用的功能,而派生类则可以针对特定需求进行扩展。在C++中,类的继承可以通过以下语法定义:
```cpp
class 派生类名 : 继承方式 基类名 {
成员声明;
};
```
这里,继承方式可以是`public`、`private`或`protected`,分别代表公有继承、私有继承和保护继承。不同的继承方式会影响派生类对基类成员的访问权限:
- 公有继承(public):基类的公有成员和保护成员在派生类中仍然是公有和保护的,派生类可以访问并修改这些成员。
- 私有继承(private):基类的公有和保护成员在派生类中变为私有,派生类内部可以访问,但外部无法直接访问。
- 保护继承(protected):基类的公有和保护成员在派生类中变为保护,只有派生类及其子类可以访问。
多态(polymorphism)则是另一个关键特性,它允许使用一个基类指针或引用操作不同的派生类对象。多态分为静态多态和动态多态:
1. 静态多态(static polymorphism):在编译时确定,主要通过函数重载(overload)和运算符重载实现。例如,同一函数名可以对应多个不同的函数实现,根据参数列表在编译时自动选择正确版本。
2. 动态多态(dynamic polymorphism):运行时确定,主要基于虚函数(virtual function)实现。基类定义虚函数,派生类可以覆盖这个虚函数,这样通过基类指针或引用调用函数时,会根据实际的对象类型调用对应的派生类版本。
虚函数是C++中实现动态多态的关键,它允许我们编写更通用的代码,不需知道对象的确切类型。例如:
```cpp
class Vehicle {
public:
Vehicle(int in_wheels, float in_weight)
: wheels(in_wheels), weight(in_weight) {}
virtual int get_wheels() { return wheels; }
virtual float get_weight() { return weight; }
private:
int wheels;
float weight;
};
class Car : public Vehicle {
public:
Car(int in_wheels, float in_weight, string model)
: Vehicle(in_wheels, in_weight), model(model) {}
// 覆盖基类的get_wheels
int get_wheels() override { return wheels + 2; } // 假设轿车比普通车辆多两个轮子
private:
string model;
};
int main() {
Vehicle* vehicle_ptr = new Car(4, 1500, "Toyota");
cout << "Wheels: " << vehicle_ptr->get_wheels(); // 输出轿车的轮子数量
delete vehicle_ptr;
return 0;
}
```
在这个例子中,虽然`vehicle_ptr`是`Vehicle`类型的指针,但它实际上指向的是`Car`对象。由于`get_wheels`是虚函数,所以调用`vehicle_ptr->get_wheels()`会得到轿车的轮子数量,而不是普通车辆的。
通过继承和多态,我们可以创建更加模块化和可扩展的代码结构。例如,在汽车类的设计中,可以有`Car`、`Bus`和`Truck`等派生类,它们都继承自`Vehicle`基类,共享一些共同的属性(如轮子数量、重量),同时各自添加特有的功能(如乘客容量、载货能力等)。这种设计不仅减少了代码重复,还使得系统能够更好地应对未来的需求变化。
C++的继承和多态是实现面向对象设计的重要工具,它们有助于构建具有高度灵活性、可扩展性和可维护性的软件系统。理解并熟练运用这两个概念,是提升C++编程技能的关键步骤。
2019-06-23 上传
2021-09-28 上传
166 浏览量
2021-10-12 上传
2021-10-20 上传
200 浏览量
122 浏览量
点击了解资源详情
点击了解资源详情
theAIS
- 粉丝: 60
- 资源: 2万+
最新资源
- matlab代码做游戏-R_for_VTT:芬兰VTT技术研究中心的R课程
- SocketDemo.zip
- NodeJsInvokeC++.zip
- c支持:在VimgVim中编辑CC ++程序。 插入代码段,编译代码,运行MakeCMake ...并查找帮助
- DLP713.github.io
- 黑龙江省(含各市县边界) shp
- webgl-fundamentals:紧随https://webglfundamentals.org
- markdown-drawer:简化大型markdown文件中的导航
- S7-300的n个常见问题解答.zip
- BarPrint.rar
- formulario-login-registro:使用HTML CSS制作的登录和注册表单,并使用JS进行一点验证
- Valheim-NeonPack-Lite
- 河堤施工组织设计-堤防工程施工规范
- laniakea:Laniakea是用于在各种云提供商处管理实例的实用程序,可帮助建立模糊集群
- matlab代码做游戏-awesome-cpp:很棒的cpp
- 帆布学习:帆布学习