c++中的虚函数有什么作用?

如题所述

类的三个重要特征:封装、继承、多态性。
其中多态性就是通过函数重载(运算符重载实质上也是函数重载)和虚函数来实现的。
虚函数的作用:在基类用virtual声明成员函数为虚函数,在派生类中重新定义该函数,就可以通过基类指针或引用来访问基类和派生类中的同名函数。
虚函数实现多态性:同一类族中不同类的对象,对同一函数调用做出不同的响应。
多态性其实就是一个接口,多种方法,分为静态多态性和动态多态性,函数重载属于静态多态性,在程序编译时就可确定调用哪个函数,其过程称为静态关联或早期关联,静态多态性又称编译时多态性;虚函数属于动态多态性,在程序运行过程中才动态地确定所调用的是那个对象的函数,其过程称为动态关联或滞后关联,动态多态性又称运行时多态性。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-16
virtual 关键词可以将一个类的函数说明为虚函数
虚函数的主要用处是对派生类实现动态联编.举例说明一下:
class a
{
virtual int func(){return 1;}
}
class b:public a
{
int func(){return 2;}
}
void main()
{
a *p;
p=new b;
p->func();//得到的结果是2.
}
由上面简单的例子可知,一个基类的指针可以指向他的子类,使用该指针调用函数时,如果调用的函数在基类中被说明为虚函数,那么子类中该函数也自动成为虚函数,调用时会根据指针所指向的对象调用相应类的虚函数.实现动态联编.
更详细的说明你可以看一下虚函数表本回答被提问者采纳
第2个回答  2015-09-09
指针的类型是可以强行转来转去的。普通情况你转什么类型就调对应类型的同名函数。但是虚函数实现多态后,尽管可能你把指针转成父类的类型,但是因为创建的时候是子类的类型,它还是会调用子类的这个虚函数。
这样可以统一代码且正确运用子类的新特性。
也因为如此,如果父类虚函数不做实现而=0成为纯虚函数,那么父类就不可以实例化,这个没有实现的虚函数也永远不会调用。因为根据多态的动态联编,总是会调用实例化了的子类的该方法。指针强行转成父类也不会调用纯虚函数。
相似回答