C++ 虚函数详解

Posted by admin On 8月 - 4 - 2022

在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。

**(2)抽象类的作用:**抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。

PS:一定要注意静态联翩和动态联编的区别;对于我来说,若没有在VC6.0中亲自去测试,凭自己的感觉,当在键盘中输入c时,我会觉得由于有p=&child;这一句代码,我会认为结果都是:>1Thisischild,function1>>2Thisischild,function2但是结果却是:>1Thisisparent,function1>>2Thisischild,function2**因为虽然实际上这个指针指向的是Child类的对象,但编译器无法知道这一事实,它只能按照调用Parent类的函数来理解并编译,所以我们看到了第一行的结果。

BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,1.简介虚函数是C++中用于实现多态(polymorphism)的机制。

然后我们分别声明base与derived并且通过show函数调用它们的func函数,子类传参给父类也是非常正常的一个操作,但是结果可能却令人不解:Base!Base!Base!Derived!这里有一个很大的问题,因为当我们将derived传过去的时候并没有调用derived的虚函数!也就是说虚函数不再是多态的了。

我们去内存看一下。

虚函数是为了继承接口和默认行为纯虚函数只是继承接口,行为必须重新定义,**(1)**在基类用virtual关键字声明成员函数为虚函数。

这就是多态性,对同一消息,不同对象有不同的响应方式。

在面向对象的程序设计中,经常会用到类的继承,目的是保留基类的特性,以减少新类开发的时间。

纯虚函数的意义,让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供一个合理的默认实现。

因为Base2是第二个基类,所以必须对指针进行调整,即加上一个offset,让ptr2指向Base2子对象。

简单地说,当程序编译时,编译就会为虚函数所在的各个类(基类和派生类)各自创建一个VTable,并将类的虚函数放在此表中,然后在其内部创建一个指针vptr指向该虚表结构VTable,vptr称为虚指针。

如果我们在运行上面的程序时任意输入一个非c的字符,结果如下:Thisisparent,function1Thisisparent,function2请注意看第二行,它的结果出现了变化。

虚函数表对C++了解的人都应该知道虚函数(VirtualFunction)是通过一张虚函数表(VirtualTable)来实现的。

这样就保证不会有问题。

定义:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数1语法:virtual函数返回类型函数名(参数表)CallVirtualFun方法现在我们拥有一个通用的CallVirtualFun方法。

虚基类是虚继承中的基类,暂不做详细说明。

虚函数表由表一起自动生成和维护。

Add your comment