诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

面向对象编程中的多态性

多态性是一种编程概念,它允许不同的对象类,通过继承关系,调用同一个函数元素时,以各自的方式来响应。这有助于创建一个通用机制,不仅描述基类的行为,还描述其后代类的行为。

基本概念

以形状类(CShape)为例,我们定义了一个名为 GetArea() 的成员函数,旨在计算形状的面积。在所有从基类继承的后代类中,我们根据计算特定形状面积的规则重新定义此函数。

例如,对于正方形(类 CSquare),其面积是通过其边长计算的;而对于圆形(类 CCircle),其面积则是通过其半径表达的。

示例:多态性的应用

考虑以下场景,我们有一个数组存储 CShape 类型的对象,其中可以存储基类对象和所有后代类对象。接着,我们可以为数组中的每个元素调用相同的函数。

  1. 基类定义:
class CShape 
{ 
protected: 
   int m_type; // 形状类型 
public: 
   double GetArea(){return (0);} // 返回形状的面积 
};
  1. 派生类的定义:

圆形类的定义如下:

class CCircle : public CShape
{
private: 
   double m_radius; // 圆半径
public: 
   void SetRadius(double r){m_radius=r;} 
   virtual double GetArea(){return (3.14*m_radius*m_radius);} 
};

正方形类的定义与之类似:

class CSquare : public CShape
{
private: 
   double m_square_side;
public: 
   void SetSide(double s){m_square_side=s;} 
   virtual double GetArea(){return (m_square_side*m_square_side);} 
};
  1. 数组的动态创建:

多态性允许我们创建一个基类 CShape 对象的数组。在声明此数组时,这些对象尚未知道,它们的类型未定义。程序执行过程中决定每个数组元素将包含的对象类型。这涉及到适当类的对象的动态创建,因此需要使用对象指针而不是对象。

例如,可以使用 new 运算符动态创建对象,并使用 delete 运算符单独和明确地删除每个这样的对象。

CShape *shapes[5]; 
CCircle *circle=new CCircle(); 
circle.SetRadius(2.5);
shapes[0]=circle;
  1. 对象操作:

对于已初始化和未初始化的对象,您可以通过遍历整个指针数组来检查它们。

为了确保不会意外删除不是动态分配的对象,我们必须在使用 delete 运算符删除一个对象时检查其指针的类型。

重点

多态性不仅包括在继承期间重新定义函数,还包括在一个类内部使用不同的参数集实现相同的函数。这意味着该类可能有几个名称相同但类型和/或参数集不同的函数。在这种情况下,多态性是通过函数重载来实现的。

总结

多态性是面向对象编程的核心概念之一,它增强了代码的复用性和可扩展性。通过理解和恰当地使用多态性,程序员可以写出更加模块化和易于维护的代码。

未经允许不得转载:ea编程网 » 面向对象编程中的多态性