首页 新闻 搜索 专区 学院

C++疑问,倾囊求教!!

0
悬赏园豆:10 [待解决问题]
class B
{
private:
    int m_data;
public:
    B(int data=1)
    {        
        m_data=data;
    }
    int doGetData()
    {
        return m_data;
    }    
    ~B()
    {
    }
    void test()
    {
        Speaker();
    }
    virtual void Speaker()
    {
        cout<<"B is speaking!"<<endl;
    }
};
class C:public B
{
protected:
    int m_data;
public:
    C(int data=2)
    {
        m_data=data;
    }
    
    ~C()
    {
    }
    void Speaker()
    {
        cout<<"C is speaking!"<<endl;
    }
};
int main()
{
    C c(10);    
    c.B::Speaker();
//c.B::test();
    return 0;
}

运行后显示结果如下:

c.B::Speaker()显示B is speaking;

c.B::test()显示C is speaking;

明白B中虚表在内存中的结构,为什么直接调用B::Speaker能直接使用B类中的虚函数??

super 86的主页 super 86 | 初学一级 | 园豆:11
提问于:2013-10-03 11:49
< >
分享
所有回答(2)
0

可能是语法上的规定吧

angelshelter | 园豆:9687 (大侠五级) | 2013-10-03 18:07

是么?

支持(0) 反对(0) super 86 | 园豆:11 (初学一级) | 2013-10-04 15:38
0

virtual 也会被继承下来。

c中实际上是定义了 virtual Speaker()

c.B::Speaker()直接指向了B的成员函数

c.B::test()直接指向了B的成员函数,由于this仍未c类型, 下一步继续调用c的Speaker()

求轻拍

18fanna | 园豆:210 (菜鸟二级) | 2013-10-06 22:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册