首先你要明白C++为什么要引进虚函数这个机制,
虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
从以上的定义来看,需函数简单的说就是为了让基类指针能够指向派生类中与基类同名的函数而引进的,举个简单的例子,1:你定义了一个“图形类”这样的基类,然后再类中定义了一个求图形周长的函数(不是虚函数);2:现在再定义这个“图形类”的一个派生类“三角形类”,中也含有一个求三角形周长的函数(不是虚函数);3:再定义一个这个“图形类”的一个派生类“矩形类”,中也含有一个求矩形周长的函数(不是虚函数);4:现在回到主函数,你定义了这个“图形类”的一个指针(即基类的指针),根据C++的规定,基类的对象指针可以指向它的公有派生类的对象,但是当其指向公有的派生类对象时,它只能访问派生类中从基类继承来的成员,而不能访问公有派生类中定义的成员。
所以,你定义的这个指针是不能够指向“三角形”和“矩形”类中定义的那个周长函数,但是,如果你在基类中将这个周长函数定义为虚函数,则这样的代码是允许的,而且能够到达预期目的。
为什么呢?你想想你在基类中只定义一个基类指针,可以通过改变基类指针所指的对象(即派生类对象),就可以通过指针访问这个虚函数(虚函数的函数原型是一样的)而完成不同图形周长的计算和输出,显然,这是很值得提倡的,因为你只需“p->perimeter;”一个代码就能完成很多图形的工作。
不知道,你能否明白,总的来说就是虚函数就是为了让基类指针(或引用)能访问派生类中定义的成员。
虚函数就是在基类中被关键字virtual说明,并在派生类中重新定义的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
虚函数就是为了让基类指针(或引用)能访问派生类中定义的成员。
虚函数的应用很多,其中最常用的是虚函数的覆盖技术
虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
比如:基类定义一个多边形,其种虚函数是求面积;
这个基类有多个派生类,派生类中对从基类继承来的虚函数求面积重定义,
如,派生类三角形,定义了求面积的方法是“半底高”;
派生类正方形,定义了求面积的方法是“边平方”;
……等等
以上的基类中的虚函数纯粹就是为了派生类的重定义而存在……