21xrx.com
2024-09-20 05:27:58 Friday
登录
文章检索 我的文章 写文章
C++中的多态性(Polymorphism in C++)
2023-07-09 20:26:00 深夜i     --     --
多态性(Polymorphism) 虚函数(Virtual functions) 实现方式(Implementation) 运行

在面向对象编程中,多态性是一种非常重要的概念。它使得我们能够写出更加灵活和可扩展的代码,从而提高代码的重用性和可维护性。C++是一种支持多态性的面向对象编程语言,在本篇文章中,我们将介绍C++中的多态性。

多态性是指同一种操作作用于不同的对象,可以有不同的解释和执行。在C++中,多态性可以通过两种方式实现:虚函数和函数重载。

使用虚函数实现多态性

虚函数是一个基类中声明的虚函数,在派生类中可以重新定义,并且可以根据对象的实际类型来调用相应的函数。这种实现方式称为动态多态性。

虚函数的声明格式为:virtual 返回类型 函数名(参数列表)。

例如:

class Shape {

public:

   virtual void draw()

     cout << "Draw a Shape" << endl;

};

class Circle : public Shape {

public:

   void draw()

     cout << "Draw a Circle" << endl;

};

以上代码中,Shape类中的draw()函数是一个虚函数。在派生类Circle中,我们重新定义了这个函数,使它输出“Draw a Circle”。

在实现多态性时,我们可以通过指向基类的指针或引用来调用派生类中的虚函数。例如:

Shape* s = new Circle();

s->draw();

这一段代码中,我们首先创建了一个Circle对象,并将其赋值给一个指向Shape的指针s。然后我们调用了s中的draw()函数。由于draw()函数是虚函数,因此它会在运行时动态绑定到派生类Circle中的draw()函数,输出“Draw a Circle”。

使用函数重载实现多态性

函数重载是指一个类中可以定义多个同名的函数,但是它们的参数列表不同。这种实现方式称为静态多态性。

例如:

class Shape {

public:

   void draw()

     cout << "Draw a Shape" << endl;

   void draw(int length)

     cout << "Draw a Shape with length " << length << endl;

};

在以上代码中,我们定义了两个名为draw()的函数。其中第一个函数不带参数,第二个函数有一个名为length的整型参数。

在实现多态性时,我们可以通过参数列表的不同来调用不同的函数。例如:

Shape s;

s.draw(); //调用的是不带参数的draw()函数

s.draw(10); //调用的是带一个参数的draw()函数

在以上代码中,我们首先创建了一个Shape对象s,然后分别调用了它的两个draw()函数。由于参数列表不同,两次调用分别对应不同的函数,输出的结果也不同。

总结

C++中有两种实现多态性的方式:虚函数和函数重载。虚函数是通过在基类中声明虚函数,在派生类中重新定义并根据对象的实际类型调用相应的函数实现多态性;函数重载是通过在一个类中定义多个同名但参数列表不同的函数,来实现多态性。无论是哪种实现方式,都可以为C++中的面向对象编程带来更多的灵活性和可扩展性。

  
  

评论区

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