C++多态

多态是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++代码的必备技能。