一直苦恼的父类子类/父类指针子类指针转换的问题
我有
class A
{
int m_a;
};
class B:public A
{
char m_b;
};
A a;
B b;
A* pa = new A;
B* pb = new B;
我想请问:
a能否转换为b
b能否转换为a
pa能否转换为pb
pb能否转换为pa
如果能转换的,如果会引发什么问题,也请帮小弟提醒一下
困扰了很久,先是学 COM发现里面接口父类转成子类,后来做可序列化的类又看到CObject和子类转来转去的,换成指针就更晕了,请各位大侠赐教!
[解决办法]
1.a永远是a,b,pa,pb也不会变;
2.可以把b赋给一个类型为A的对象,比如a = b;
3.把a赋给一个类型为B的对象不行,比如b = a;是会出问题的;
4.pa可以指向一个A的对象,也可以指向一个B的对象;
5.pb可以指向一个B的对象,也可以指向一个公有继承B的对象;
6.当上面的默认规则限制了你的使用的时候,你可以强制转,但是后果自负。
[解决办法]
1楼大大以说了。可以用内存模型来考虑,子类占用的内存至少不能小于父内,那么子类转父类肯定是要被切片。的。C++是门成熟的语言,用你现实生活来思考他吧。
[解决办法]
用dynamic_cast研究一下就明白了吧
pa可以等于new B;
但pb = new A是不行的
a可以等于b
但b = a是不完整的,可能出问题的。
[解决办法]
[解决办法]
a能否转换为b
a不能转换为b当然你要强制转换也行,但是后果自负
b能否转换为a
b转换为a没问题,会发生截断
pa能否转换为pb
你将pa转换为pb没问题,但是你一旦调用了B里面特有的成员的时候你会出错
pb能否转换为pa
这个当然没问题