父类的this指针与子类的关系??代码写出来了希望分析下

蔡袅 2012-03-06 04:59:33
学C++几天了,在一个视频中看到,说父类中出现的this指针,一旦有子类调用那么这个this指针就是指向派生类的,这句话我想了下大概明白,自己写了个例子不知道能不能支持这句话:
#include <iostream.h>

class Father
{
public :
Father(int i=0)
{
father=this;//保存this指针为public方便外部调用
cout<<this<<endl;//发现和Son构造函数的地址一致?
}
void Print()
{
cout<<"Father.Print"<<endl;
}
Father *father;
};
class Son:public Father
{
public:
Son()
{
cout<<this<<endl;
}
void Print()
{
cout<<"Son.Print"<<endl;
}

};
Son son;//实例化全局
void main()
{
Son *_son= (Son*)son.father;//获取这个this指针,强制转化
_son->Print();//看调用的是哪个,如果输出:Son.Print则保存的是派生类的this指针?
}

有几个地方有问号希望分析下,或者各位写下比较好的验证代码,谢谢。
...全文
274 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
caddor 2012-03-06
  • 打赏
  • 举报
回复
多重继承

比较特殊

你的是单继承,两个this的值一样。。。。。

pengzhixi 2012-03-06
  • 打赏
  • 举报
回复
额 不是说保存哪个this指针,而是说派生类和基类的this指针的类型不同而已。虽然他们指向同一个对象。在多继承的情况下,this指针指向的位置会适当的调整。从而使得所指对象的部分符合this指针的类型
bluewanderer 2012-03-06
  • 打赏
  • 举报
回复
一般情况下(不是太脑残的编译器),对于简单继承

class A {};
class B : A { int x; };

B的结构实际上和

class B { class A base; int x; };

完全相同

也就是说你有一个A的子类B的对象b,其实就是前面一个A的对象后面接着B自己的数据成员。所以只想b的指针同时也指向这一个a的对象。

但是对于多继承,子类指针和父类指针地址就不一定一样了。
蔡袅 2012-03-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

里面包含的地址一致但是this指针的类型是不一致的。在父类的构造函数里面类型就是Father*,在派生类里面就是Son*;
[/Quote]明白,是地址一样但是指向的类型不一致一个Son一个Father,后面那句可以再解释下吗?
pengzhixi 2012-03-06
  • 打赏
  • 举报
回复
里面包含的地址一致但是this指针的类型是不一致的。在父类的构造函数里面类型就是Father*,在派生类里面就是Son*;

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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