多态的背后

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(),于是。。

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