📅  最后修改于: 2023-12-03 15:14:03.872000             🧑  作者: Mango
C++中的虚函数是实现多态的重要机制之一。通过使用虚函数,我们可以在程序运行时根据对象实际所属的类来调用相应的函数,从而实现运行时多态性。本文将为大家介绍虚函数和运行时多态性的概念和用法。
在C++中,虚函数是一个被声明为虚函数的基类函数。当在派生类中重新定义该函数时,如果该函数被调用,将自动调用派生类的版本而不是基类的版本。如果在派生类中没有重新定义该函数,则将调用基类的版本。
虚函数的声明形式如下:
virtual return_type function_name(argument_list) = 0;
其中virtual
关键字表示该函数是虚函数。基类中的纯虚函数通常没有实现,因此必须在派生类中重新定义实现。在基类中声明纯虚函数的方式如下:
virtual return_type function_name(argument_list) = 0;
运行时多态性是指,在程序的运行时期,在已知一个指针指向一个基类对象的情况下,可以调用相同的方法但实际上不同的派生类对象方法。在C++中,运行时多态性的实现需要使用虚函数。
以下是一个简单的示例,用于演示运行时多态性的使用方法:
#include<iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0){
width = a;
height = b;
}
virtual int area() {
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area () {
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
int main(){
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
shape->area();
return 0;
}
在上面的示例中,我们定义了一个基类Shape
和一个派生类Rectangle
。在Shape
类中,我们定义了一个虚函数area()
。在派生类Rectangle
中,我们重新定义了该函数以计算矩形的面积。
在主程序中,我们声明了一个指向Shape
对象的指针,并将其指向一个Rectangle
对象。我们将调用该对象的area()
函数,但实际上将调用Rectangle
类中重新定义的版本。这就是C++中运行时多态性的实现。
C++中的虚函数和运行时多态性是实现面向对象程序设计的核心概念之一。通过使用虚函数,我们可以在程序运行时根据对象实际所属的类来调用相应的函数,从而实现多态性。在实际的程序开发过程中,虚函数和运行时多态性的使用非常广泛,对于提高程序的可重用性和可维护性都有很大的帮助。