虚函数问题?我的观点是否正确?
试看下面的代码:
class base
{
public:
virtual void test() { ; } ;
};
class derived:public base
{
public:
void test() { ; };
virtual void test___2() { ; };
};
void main()
{
base *p=new derived;
p->test(); //OK!
p->test__2(); //error! why?
}
我的问题是:
p->test__2() ;
观点:
1 通过基类指针调用test__2时,p->vptr实际上使用的是derived的vptr.
2 p的静态类型为base,所以当调用只在derived中声明的虚函数test__2时,在base中没vtbl中找不到该函数,也就是无法确定该函数的slot值,从而调用会出错。(注:多态的类(即含有虚函数)的vtbl是在编译阶段由编译器完成构建的。)