收藏本站 新浪微薄

当前位置:365app官网下载 – 最新官网app下载网络营销 → 内容

简单分析一下C++多态的核心 虚函数和它的虚函数表机制

时间::2022-08-04 . 阅读: . 评论:0 . 发表评论

关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。

同时大家都说虚函数的效率低,其原因就是,在调用虚函数之前,还调用了获得虚函数地址的代码。

如果成员函数在类被继承后的功能不需要被修改,或派生类用不到该函数,则不要把它声明为虚函数。

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

他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

而如果是一个虚函数,那么这个时候它就不会立刻执行该函数了,而是开始检查对象的实例类。

纯虚函数最显著的特征是:它们必须在继承类中重新声明函数(不要后面的=0,否则该派生类也不能实例化),而且它们在抽象类中往往没有定义。

正确的原因是:虚函数的声明与定义要求非常严格,只有在子函数中的虚函数与父函数一模一样的时候(包括限定符)才会被认为是真正的虚函数,不然的话就只能是重载。

这样就很好地解决了上述两个问题。

所以,用户不能创建类的实例,只能创建它的派生类的实例。

这样就很好地解决了上述两个问题。

多重继承(有虚函数覆盖)下面我们再来看看,如果发生虚函数覆盖的情况。

执行子类的构造函数时,子类对象的虚表指针被初始化,指向自身的虚表。

简称为_V-Table_。

*2、虚函数声明如下:virtualReturnTypeFunctionName(Parameter)虚函数必须实现,如果不实现,编译器将报错,错误提示为:errorLNK****:unresolvedexternalsymbol”public:virtualvoid__thiscallClassName::virtualFunctionName(void)”*3、对于虚函数来说,父类和子类都有各自的版本。

char*constcp;(*都成pointerto)cpisaconstpointertocharconstchar*p;pisapointertoconstchar;C++标准规定,const关键字放在类型或者变量名之前是等价的。

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

最新

图片

推荐