关于虚函数 虚函数表解决思路
关于虚函数 虚函数表
#include <iostream>
using namespace std;
class Base
{
public:
virtual void f(float x)
{
cout<<"Base::f(float)"<< x <<endl;
}
};
class Derived : public Base
{
public:
virtual void ff(float x)
{
cout<<"Derived::ff(float)"<< x <<endl; //多态、覆盖
}
};
int main(void)
{
Derived d;
Base * pb = &d;
Derived * pd = &d;
pb->ff(3.14f);
return 0;
}
编译器提示:错误 1 error C2039: “ff”: 不是“Base”的成员 e:\program\cpp_test\cpp_test\1.cpp 27 1 cpp_test
这是Derived 类内存布局:
class Derived size(4):
1> +---
1> | +--- (base class Base)
1> 0 | | {vfptr}
1> | +---
1> +---
1>
1> Derived::$vftable@:
1> | &Derived_meta
1> | 0
1> 0 | &Base::f
1> 1 | &Derived::ff
1>
1> Derived::ff this adjustor: 0
也就是虚函数表中已经有ff函数了呀,为啥还提示找不到呢,这是在运行时才会找吧?不是编译时。
------解决方案--------------------
我没分了,楼上给我点吧
#include <iostream>
using namespace std;
class Base
{
public:
virtual void f(float x)
{
cout<<"Base::f(float)"<< x <<endl;
}
};
class Derived : public Base
{
public:
virtual void ff(float x)
{
cout<<"Derived::ff(float)"<< x <<endl; //多态、覆盖
}
};
int main(void)
{
Derived d;
Base * pb = &d;
Derived * pd = &d;
pb->ff(3.14f);
return 0;
}
编译器提示:错误 1 error C2039: “ff”: 不是“Base”的成员 e:\program\cpp_test\cpp_test\1.cpp 27 1 cpp_test
这是Derived 类内存布局:
class Derived size(4):
1> +---
1> | +--- (base class Base)
1> 0 | | {vfptr}
1> | +---
1> +---
1>
1> Derived::$vftable@:
1> | &Derived_meta
1> | 0
1> 0 | &Base::f
1> 1 | &Derived::ff
1>
1> Derived::ff this adjustor: 0
也就是虚函数表中已经有ff函数了呀,为啥还提示找不到呢,这是在运行时才会找吧?不是编译时。
------解决方案--------------------
我没分了,楼上给我点吧