虚函数

非 Y 不嫁゛ 提交于 2019-12-16 09:19:30

C++中并没有方法的概念。方法(method)实际上是java的概念。在C++中,方法被称为函数。

所以虚方法的准确说法是虚函数。在C++中,是一种特别的类成员函数。
在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数,用法格式为:virtual 函数返回类型 函数名(参数表) {函数体};
实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
也就是说被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异,而采用不同的策略。
示例代码:
#include
using namespace std;
class Pet{
public:
virtual void play() //定义函数为虚函数
{
cout<<“它正在玩!”<<endl;
}
};
class Dog : public Pet //继承Pet类
{
public:
void play();
};
void Dog::play()
{
Pet::play();
cout<<“它正在追猫!”<<endl;
}
int main()
{
Pet *dog = new Dog;
dog->play(); 在这里,dog虽然是指向Pet的指针,但是被调用的函数play却是 Dog的
return 0;

}
如果没有virtual(虚拟的)关键词,函数输出结果为:
它正在玩!
加了virtual(虚拟的)关键词,函数输出结果为:
它正在玩!
它正在追猫!

首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。

定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。

定义一个函数为纯虚函数,才代表函数没有被实现。

定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

1、虚函数:为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数。
虚函数定义:
virtual void fun();
2、纯虚函数:在基类中是没有定义的,必须在子类中加以实现。
纯虚函数定义:
virtual void fun() = 0;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!