小弟的疑惑:创建子类对象时地址是否与父类对象一致?

chenweiye120 2009-09-15 05:13:39
俺编了个一般的程序用来测试:
#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

兄弟最不明白的是为什么最后两个输出的地址是一样的?大虾们帮帮忙哦。
...全文
285 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
曾经的董胖 2009-09-15
  • 打赏
  • 举报
回复
呵呵,通过楼主的结贴感受,发现楼主还是没有明白啥是对象。

b.get(); 之所以输出同一个值,那是因为b只是一个对象,this是同一个this,所以才一样。
chenweiye120 2009-09-15
  • 打赏
  • 举报
回复
感谢楼上各位的解答,俺已经大概明白了。在对象b创建时调用了ceshi1的构造函数,所以指针p1被赋予b的首地址啦,由于继承了p1成员变量,所以p2与p1的确相同。结贴了,再次谢谢各位。
MoXiaoRab 2009-09-15
  • 打赏
  • 举报
回复
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了
dirdirdir3 2009-09-15
  • 打赏
  • 举报
回复
要搞清楚类和对象,对象是类的一个实例............12,34都是不同的对象,而56则是同一个对象(实例)
dirdirdir3 2009-09-15
  • 打赏
  • 举报
回复
5和6实际上是一个实例,一个实例的话this当然指向同一个地址了...............
qiangorqiang 2009-09-15
  • 打赏
  • 举报
回复
1和2、3和4、5和6分别是两个对象的实例(分配的内存空间不一样,地址也不同),他们的this指向不同的地址。
chenweiye120 2009-09-15
  • 打赏
  • 举报
回复
看了大家说的,那为什么1和2,3和4不同,5和6却相同呢?如果只有一个对象的话1和2,3和4也应该相同啊。
bragi523 2009-09-15
  • 打赏
  • 举报
回复
只有一个对象啊
hufen2740 2009-09-15
  • 打赏
  • 举报
回复
构造子对象时候会先构造父对象,这个时候的父对象是属于这个子对象的,前面几楼的都说的对。
qiangorqiang 2009-09-15
  • 打赏
  • 举报
回复
this指向分配给对象内存的首地址,对象相同this就相同。不同的是子类的成员相对与父类有一定的偏移量。
xwsn007 2009-09-15
  • 打赏
  • 举报
回复
父类对象是子类对象的子对象,构造子类对象时,先构造一个父类的子对象,再在其后加上子类自己的数据成员。这样一来,父类和子类的对象当然就一致了
chenyu2202863 2009-09-15
  • 打赏
  • 举报
回复
C++对象模型
曾经的董胖 2009-09-15
  • 打赏
  • 举报
回复
this是一个指向object的指针。
作为一个object是不存在父object+子Object的,继承是类的特性,一旦对象生成了,被定性了,只有一个object.
所以 b.get() 输出的当然应该是同一个值,因为只有一个对象 b

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧