多态的背后

Posted buddho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多态的背后相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

class A{
public:
    A(){f();}
    virtual void f(){printf("in class A
");}
};

class B:public A{
public:
    void f(){printf("in class B
");}
};


B b;

调用的结果是什么?

 

你需要知道的是:

1、b.f()在C++里会转换成B::f(&b),

2、B b的过程是什么?

B先调用A的构造,A的构造先设置好的vptr = A::vtable

随后,B的构造再把A::vtable里面的有自己实现的项覆盖掉。

 

所以,这里还没有覆盖,f(&b)这时候,vtable里指向的是A::f(),于是。。

以上是关于多态的背后的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

解密体育背后AI黑科技:花样滑冰动作识别多模视频分类和精彩片段剪辑

java中封装,继承,多态,接口学习总结

多态性和动态铸造

如何写出又臭又长难以维护的代码?

活动接收全屏半透明DialogFragment背后的触摸事件