父类的this指针与子类的关系?代码写出来了希望分析下,该怎么处理
父类的this指针与子类的关系??代码写出来了希望分析下
学C++几天了,在一个视频中看到,说父类中出现的this指针,一旦有子类调用那么这个this指针就是指向派生类的,这句话我想了下大概明白,自己写了个例子不知道能不能支持这句话:
有几个地方有问号希望分析下,或者各位写下比较好的验证代码,谢谢。
------解决方案--------------------
里面包含的地址一致但是this指针的类型是不一致的。在父类的构造函数里面类型就是Father*,在派生类里面就是Son*;
------解决方案--------------------
一般情况下(不是太脑残的编译器),对于简单继承
class A {};
class B : A { int x; };
B的结构实际上和
class B { class A base; int x; };
完全相同
也就是说你有一个A的子类B的对象b,其实就是前面一个A的对象后面接着B自己的数据成员。所以只想b的指针同时也指向这一个a的对象。
但是对于多继承,子类指针和父类指针地址就不一定一样了。
------解决方案--------------------
额 不是说保存哪个this指针,而是说派生类和基类的this指针的类型不同而已。虽然他们指向同一个对象。在多继承的情况下,this指针指向的位置会适当的调整。从而使得所指对象的部分符合this指针的类型
------解决方案--------------------
多重继承
比较特殊
你的是单继承,两个this的值一样。。。。。
学C++几天了,在一个视频中看到,说父类中出现的this指针,一旦有子类调用那么这个this指针就是指向派生类的,这句话我想了下大概明白,自己写了个例子不知道能不能支持这句话:
- C/C++ code
#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指针? }
有几个地方有问号希望分析下,或者各位写下比较好的验证代码,谢谢。
------解决方案--------------------
里面包含的地址一致但是this指针的类型是不一致的。在父类的构造函数里面类型就是Father*,在派生类里面就是Son*;
------解决方案--------------------
一般情况下(不是太脑残的编译器),对于简单继承
class A {};
class B : A { int x; };
B的结构实际上和
class B { class A base; int x; };
完全相同
也就是说你有一个A的子类B的对象b,其实就是前面一个A的对象后面接着B自己的数据成员。所以只想b的指针同时也指向这一个a的对象。
但是对于多继承,子类指针和父类指针地址就不一定一样了。
------解决方案--------------------
额 不是说保存哪个this指针,而是说派生类和基类的this指针的类型不同而已。虽然他们指向同一个对象。在多继承的情况下,this指针指向的位置会适当的调整。从而使得所指对象的部分符合this指针的类型
------解决方案--------------------
多重继承
比较特殊
你的是单继承,两个this的值一样。。。。。