C++继承与多态:代码复用和类的派生

需积分: 3 1 下载量 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++编程技能的关键步骤。