虚函数中的变量作用域问题

假设有如下所示的一个继承关系:

对于实例:Derive d; 的虚函数表如下:

 

例如:

class Base
{
public:
    virtual void Show()
    {
        cout << a << endl;
    }
    static int a;
};

class Derived : public Base
{
public:
    virtual void Show()
    {
         cout << a << endl;
    }
    static int a;
};

int Base::a = 1;
int Derived::a = 2;

int main(int argc, char *argv[])
{
    Base *p = new Derived;
    p->Show();
    delete p;
    p = NULL;
    return 0;
}

则输出为1,理由是虚函数表中指向Show是Base::Show,因此,很自然里面调用的变量只能是Base作用域的a!

posted @ 2016-10-12 09:02  bonelee  阅读(317)  评论(0编辑  收藏  举报