Maison > Article > développement back-end > Comment le polymorphisme interagit-il avec la surcharge de fonctions en C++ ?
多态性和函数重载相互作用:基类中创建重载函数,派生类中重新定义这些函数版本。父类指针或引用可以指向子类对象,根据对象实际类型调用不同的方法。示例代码中,Shape 基类声明 area() 纯虚函数,派生类 Rectangle 和 Circle 重新定义 area() 方法计算各自的面积。
C++ 中多态性和函数重载的相互作用
在 C++ 中,函数重载允许使用相同函数名创建函数的不同版本,这些版本具有不同的参数列表。
多态性允许子类对象以其父类的类型进行处理。这允许父类指向子类对象的指针或引用,从而可以根据对象的实际类型调用不同的方法。
当多态性和函数重载一起使用时,可以在基类中创建重载函数,并在派生类中重新定义这些函数版本。
示例代码:
class Shape { public: virtual double area() = 0; // 纯虚函数 }; class Rectangle : public Shape { public: Rectangle(double length, double width) : _length(length), _width(width) {} double area() override { return _length * _width; } private: double _length, _width; }; class Circle : public Shape { public: Circle(double radius) : _radius(radius) {} double area() override { return 3.14 * _radius * _radius; } private: double _radius; }; int main() { Shape* shapes[] = { new Rectangle(4.5, 3.2), new Circle(2.5) }; for (Shape* shape : shapes) { cout << shape->area() << endl; // 调用正确的 area() 方法 } return 0; }
输出:
14.4 19.625
此示例中,Shape
基类声明了一个 area()
纯虚函数。派生类 Rectangle
和 Circle
重新定义 area()
方法,以不同的方式计算其面积。
main()
函数创建一个 Shape
指针数组,并将派生类对象存储在其中。循环遍历数组并调用 area()
方法,根据指向对象的实际类型调用适当的方法。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!