21xrx.com
2024-11-05 17:34:55 Tuesday
登录
文章检索 我的文章 写文章
C++实现运行时多态性
2023-07-05 10:19:36 深夜i     --     --
C++ 运行时 多态性 虚函数 继承

C++作为一门高级编程语言,在面向对象编程(OOP)中有着举足轻重的地位。运行时多态性是OOP的重要概念之一,C++也提供了丰富的机制来支持该特性的实现。

运行时多态性可以理解为在程序运行时根据具体对象的类型来确定具体执行的函数,也称为动态绑定(dynamic binding)。在C++中实现运行时多态性通常需要使用虚函数(virtual function)和多态类(polymorphic class)。

虚函数是一种特殊的成员函数,可以在基类中使用virtual关键字声明,并在派生类中进行重写。下面是一个简单的虚函数的例子:


class Base{

public:

  virtual void func()

    cout<<"This is the function in Base."<<endl;

  

};

class Derived: public Base{

public:

  void func()

    cout<<"This is the function in Derived."<<endl;

  

};

上述程序定义了一个基类Base和一个派生类Derived,其中Base中存在一个虚函数func,在Derived中进行了重写。接着可以使用以下代码进行测试:


Base *p;

Derived obj;

p = &obj; //使用基类指针p指向派生类对象obj

p -> func(); //输出This is the function in Derived.

可以看到,使用基类指针p指向派生类对象obj,并通过p调用了虚函数func,在运行时根据具体对象的类型决定了执行哪个函数。

多态类是指含有虚函数(至少一个)的类,可以通过这些虚函数实现运行时多态性。在C++中,经常使用纯虚函数(pure virtual function)来定义多态类,可以用于在派生类中强制执行对应的函数。以下是一个多态类的例子:


class Shape{

public:

  virtual double area() = 0; //纯虚函数

};

class Rectangle: public Shape{

protected:

  double width;

  double height;

public:

  Rectangle(double w, double h): width(w), height(h){}

  double area(){

    return width * height;

  }

};

class Circle: public Shape{

protected:

  double radius;

public:

  Circle(double r): radius(r){}

  double area(){

    return 3.14 * radius * radius;

  }

};

上述程序定义了一个Shape类作为多态类,其中有一个纯虚函数area,需要在派生类中进行实现。同时定义了两个派生类Rectangle和Circle,对area函数进行了重写。

可以使用以下代码进行测试:


Shape *shape;

Rectangle rect(5,10);

Circle circle(5);

shape = &rect; //使用基类指针指向派生类对象

cout<<"Rectangle area : "<<shape->area()<<endl;

shape = &circle;//使用基类指针指向派生类对象

cout<<"Circle area : "<<shape->area()<<endl;

可以看到,在运行时根据具体对象的类型选择了对应的area函数进行执行,实现了运行时多态性。

总结一下,C++实现运行时多态性通常需要使用虚函数和多态类;虚函数可以在派生类中进行重写,并在运行时根据具体对象的类型选择执行哪个函数;多态类通常使用纯虚函数进行定义,并通过在派生类中进行重写实现运行时多态性,这对于程序的扩展和维护都非常有帮助。

  
  

评论区

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