多态是C++面向对象编程的重要特性之一。多态允许使用统一的接口来调用不同的实现,从而增加代码的灵活性。本文将主要通过虚函数来介绍C++中的多态。
一、静态多态
静态多态通常是通过函数重载实现的:
class Printer {
public:
void print(int x) {
cout << "整数:" << x << endl;
}
void print(double x) {
cout << "浮点数:" << x << endl;
}
};
Printer p;
p.print(5); //调用整型打印
p.print(1.5); //调用浮点打印
编译器根据参数类型匹配函数,属于静态多态。
二、动态多态
动态多态实现通常是通过虚函数来实现的。虚函数是在基类中使用virtual声明,在派生类中重新定义的函数。
例如有一个基类Shape:
class Shape {
public:
virtual void draw() {
// 默认实现
}
};
继承Shape的子类可以重写draw方法实现自己的绘制逻辑:
class Circle : public Shape {
public:
virtual void draw() {
// 绘制圆形
}
};
class Rect : public Shape {
public:
virtual void draw() {
// 绘制矩形
}
};
三、虚函数调用
有了虚函数,就可以通过基类指针调用子类实现的函数:
Shape* p;
p = new Circle;
p->draw(); // 调用Circle的draw
p = new Rect;
p->draw(); // 调用Rect的draw
编译器会根据p的实际类型动态绑定调用正确的函数,即动态多态。
四、多态优点
多态提高了程序扩展性,通过基类接口可以灵活添加子类实现,而无需修改原代码。
多态是C++面向对象编程的一个强大特性,可以大大提高代码的灵活性和可维护性。掌握多态是写出更优雅的C++代码的必备技能。