"C++ 初学者 实践 习题 宝典"
在C++编程语言中,多态性是面向对象编程的一个核心特性,它允许我们使用一个基类的指针或引用操作不同派生类的对象,从而实现更加灵活的设计。多态性的实现主要依赖于虚函数。本节将深入探讨多态性、虚函数以及如何利用它们来构建抽象类。
12.1 多态性的概念
多态性(Polymorphism)是指同一种接口可以有不同的实现,即一个基类接口可以被不同的派生类以各自的方式重写。这种特性使得代码更加通用,提高代码的复用性和可扩展性。在C++中,多态性分为静态多态(编译时确定)和动态多态(运行时确定)。
12.2 虚函数与动态多态性
虚函数(Virtual Function)是实现C++动态多态性的重要机制。在基类中声明虚函数,允许派生类重写这个函数。当基类指针或引用指向派生类对象时,调用虚函数会根据实际的对象类型执行相应的派生类版本,而非基类版本。这被称为动态绑定或晚期绑定。
```cpp
class Vehicle
{
public:
virtual void run() const { cout << "run a vehicle. " << endl; } // 虚函数声明
};
class Car : public Vehicle
{
public:
void run() const { cout << "run a car. " << endl; }
};
class Airplane : public Vehicle
{
public:
void run() const { cout << "run a airplane. " << endl; }
};
```
在上述代码中,`Vehicle`类有一个虚函数`run()`,`Car`和`Airplane`类分别重写了这个函数。在`main()`函数中,我们可以使用基类指针调用`run()`,实现动态多态。
12.3 纯虚函数与抽象类
纯虚函数(Pure Virtual Function)是在基类中声明的,但没有定义体的虚函数,其形式为`virtual function() = 0;`。含有纯虚函数的类称为抽象类(Abstract Class),不能实例化。抽象类的作用是用来作为其他类的基类,提供统一的接口。例如:
```cpp
class Vehicle
{
public:
virtual void run() const = 0; // 纯虚函数声明
};
```
抽象类的存在使得我们可以定义一个通用的基类,而不用关心其实现细节。派生类必须实现纯虚函数,否则也会成为抽象类。
12.4 应用实例
在给出的程序中,`Vehicle`类是抽象类,它有一个虚函数`run()`。`Car`和`Airplane`类都是`Vehicle`的派生类,它们都重写了`run()`函数。在`main()`函数中,可以创建`Car`和`Airplane`的对象,然后用`Vehicle`指针调用`run()`,观察多态性效果。
```cpp
int main()
{
Vehicle* v1 = new Car(); // 创建Car对象,用Vehicle指针指向
Vehicle* v2 = new Airplane(); // 创建Airplane对象,同样用Vehicle指针指向
v1->run(); // 调用Car的run()
v2->run(); // 调用Airplane的run()
delete v1;
delete v2;
return 0;
}
```
这个例子展示了如何使用虚函数实现多态性,以及抽象类在设计中的作用。通过这种方式,我们可以编写更通用的代码,减少代码重复,提高程序的可维护性和可扩展性。
理解和掌握多态性、虚函数以及抽象类是C++学习过程中的重要环节。在实践中,这些概念可以帮助我们编写出更加高效、灵活的代码,适应不断变化的需求。对于初学者来说,通过练习和实践,逐步加深对这些概念的理解,将有助于成长为一名熟练的C++程序员。