21xrx.com
2024-11-05 18:46:56 Tuesday
登录
文章检索 我的文章 写文章
C++中多态性的两种形式
2023-07-10 15:11:41 深夜i     --     --
C++ 多态性 静态多态 动态多态

C++是一门强大的编程语言,它支持很多高级的编程特性,其中多态性就是其中之一。多态性分为两种形式:静态多态性和动态多态性。

静态多态性,又叫重载,是指在编译阶段就确定了函数或方法的调用对象,根据调用对象的不同,选择不同的函数或方法进行调用。在C++中,重载函数或方法有相同的名称,但参数的个数或类型不同。如下所示:


void foo(int a);

void foo(float b);

void foo(char c, int d);

这三个函数名称相同,但参数不同,编译器在编译时会根据调用的函数参数类型或个数来选择调用哪个函数。

动态多态性,又叫运行时多态性,是指在运行时才确定函数或方法的调用对象,根据调用对象的实际类型来选择不同的函数或方法进行调用。在C++中,实现动态多态性需要用到虚函数。

虚函数是在基类中被定义的,子类可以重写它们,但子类的方法签名和返回值必须与基类的方法相同。如下所示:


class Shape {

  public:

    virtual void draw()

      cout << "Drawing a shape" << endl;

    

};

class Circle : public Shape {

  public:

    void draw()

      cout << "Drawing a circle" << endl;

    

};

class Square : public Shape {

  public:

    void draw()

      cout << "Drawing a square" << endl;

    

};

int main() {

  Shape* shape;

  Circle circle;

  Square square;

  shape = &circle;

  shape->draw();

  shape = &square;

  shape->draw();

  return 0;

}

上述代码中,Shape类是基类,Circle和Square类是子类。Shape类中定义了一个虚函数draw(),子类Circle和Square中重写了draw()方法。在main()函数中,先将shape指向Circle对象,然后调用draw()方法,输出“Drawing a circle”;接着将shape指向Square对象,然后调用draw()方法,输出“Drawing a square”。

这就是C++中的动态多态性。通过虚函数,我们可以实现对不同类型对象的不同操作。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复