this指针问题

[复制链接]
 楼主| gxgclg 发表于 2012-5-25 23:03 | 显示全部楼层 |阅读模式
我列出了下面的测试代码:
class Father
{
public:
     
virtual
void  show()
    {
        cout
<<"Father show()"<<endl;
        cout
<<typeid(*this).name();
    }
};
class Son :  public Father
{
public:
   
void show()

    {
        cout
<<"Son show()"<<endl;
        cout
<<typeid(*this).name();
    }                  
};

int main(int argc,char argv[])
{                                                            typeid(
*this).name() 结果:
   
//Father中的show()不是虚函数

   
//    Son s;
   
//    s.Father::show();                       //  father
     
   
//Son s;
   
//s.show();                                               //Son

   
//Father *p=new Father  ;
   
//    p->show();                                             //father

   
//Father *p=new Son;         
   
//p->show();                                   //father


   
//Father *p=new Son;         
   
//p->Father::show();                                    //father


   
//修改Father中的show()为虚函数

   
//Son s;
   
//s.Father::show();                                 //son

   
//Son s;
   
//s.show();                                     //son

   
//Father *p=new Father  ;
   
//p->show();                                //father

   
//Father *p=new Son ;
   
//p->show();                                                     //Son

   
   
//Father *p=new Son;         
   
//p->Father::show();                                     //Son




我表示我没有看懂! 本来我理解的是 this指向的是实际指向的对象,
比如 : Father *p=new Son;
p->Father::show();
this 指向的就是Son 结果 输出的是:father!


我对比了上面的输出结果,发现在 virtual 和 非virtual的输出结果不一样!

比如:

Father *p=new Son;
p->Father::show();
在show()非 virtual 下 输出是 father

在 virtual 下是 Son!




实在不明白,请解释一下!

看了其他帖子 说的是 指向的 : 指向对象本身! 这个对象本身是什么?
dfsa 发表于 2012-5-25 23:16 | 显示全部楼层
有个东西叫静态类型,还有个东西叫动态类型.
typeid 求的是表达式的静态类型.
所以,,,看书吧..
baidudz 发表于 2012-5-25 23:21 | 显示全部楼层
在C++这个语言方面, 个人认为只需要掌握正确的作法, 不需要理解错误的作法, 否则你就得去语言底层挖掘一下了。
pkat 发表于 2012-5-26 23:39 | 显示全部楼层
找本C++的书看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

1653

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部