俺编了个一般的程序用来测试:
#include<iostream>
using namespace std;
class ceshi1
{
public:ceshi1 *p1;
ceshi1()
{
p1=this;
    
}
};
class ceshi2:public ceshi1
{
public:ceshi2 * p2;
ceshi2()
{
      p2=this;
}
   void get()
{
   cout<<p1<<endl;
   cout<<p2<<endl;
}};
void main()
{
ceshi1 a;
ceshi2 b;
cout<<&a<<endl<<&b<<endl;
cout<<a.p1<<endl<<b.p2<<endl;
b.get();
}最后的输出是:
0012FF7C
0012FF74
0012FF7C
0012FF74
0012FF74
0012FF74兄弟最不明白的是为什么最后两个输出的地址是一样的?大虾们帮帮忙哦。

解决方案 »

  1.   

    this是一个指向object的指针。
    作为一个object是不存在父object+子Object的,继承是类的特性,一旦对象生成了,被定性了,只有一个object.
    所以 b.get() 输出的当然应该是同一个值,因为只有一个对象 b
      

  2.   

    this指向分配给对象内存的首地址,对象相同this就相同。不同的是子类的成员相对与父类有一定的偏移量。
      

  3.   

    1和2、3和4、5和6分别是两个对象的实例(分配的内存空间不一样,地址也不同),他们的this指向不同的地址。
      

  4.   

    5和6实际上是一个实例,一个实例的话this当然指向同一个地址了...............
      

  5.   

    class ceshi2:public ceshi1 

    public:ceshi2 * p2; 
    ceshi2() 

          p2=this; 

      void get() 

      cout < <p1 < <endl; //这里的p1是从ceshi1中继承下来的
      cout < <p2 < <endl; 
    } }; 你在ceshi2构造的时候,其实从ceshi1继承下来的构造函数也执行了,那么继承下来的p1就等于ceshi2的this了
      

  6.   

    感谢楼上各位的解答,俺已经大概明白了。在对象b创建时调用了ceshi1的构造函数,所以指针p1被赋予b的首地址啦,由于继承了p1成员变量,所以p2与p1的确相同。结贴了,再次谢谢各位。
      

  7.   

    呵呵,通过楼主的结贴感受,发现楼主还是没有明白啥是对象。b.get(); 之所以输出同一个值,那是因为b只是一个对象,this是同一个this,所以才一样。