多态(Polymorphism)是面向对象程序设计中一个重要的概念,它允许同样的操作在不同的对象上有不同的行为。在C++中,多态可以通过虚函数(Virtual Function)和继承来实现。
实现多态的基本步骤:
- 定义基类(Base Class)和派生类(Derived Class):
- 基类定义通用的接口和虚函数。
- 派生类继承基类,并可以重写(override)基类中的虚函数。
// 基类 class Shape { public: // 虚函数,用于多态 virtual void draw() const { std::cout << "Drawing a shape" << std::endl; } }; // 派生类1 class Circle : public Shape { public: void draw() const override { std::cout << "Drawing a circle" << std::endl; } }; // 派生类2 class Square : public Shape { public: void draw() const override { std::cout << "Drawing a square" << std::endl; } };
2.使用基类指针或引用:
- 基类的指针或引用可以指向派生类的对象,通过基类指针或引用调用虚函数,实现多态
int main() { Shape* shapePtr; Circle circle; Square square; shapePtr = &circle; shapePtr->draw(); // 调用Circle类的draw()函数 shapePtr = □ shapePtr->draw(); // 调用Square类的draw()函数 return 0; }
Shape
类是基类,其中的draw()
函数是虚函数。Circle
和Square
类是Shape
类的派生类,它们分别重写了draw()
函数。在main()
函数中,通过Shape
类的指针shapePtr
分别指向Circle
和Square
对象,并调用draw()
函数。由于draw()
函数是虚函数,并且根据实际对象类型进行动态绑定,因此会分别调用Circle
和Square
类中的draw()
函数,实现了多态。注意事项:
- 虚函数必须在基类中声明为
virtual
,并且可以在派生类中进行重写(override
)。 - 使用虚函数机制时,建议在基类析构函数中声明虚析构函数,以确保在删除指向派生类对象的基类指针时,会调用派生类的析构函数,避免内存泄漏和未定义行为。
-
多态是面向对象程序设计的重要特性,通过合理使用虚函数和继承,可以提高代码的灵活性和可扩展性。