首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一直苦恼的父类子类/父类指针子类指针转换的有关问题

2012-04-04 
一直苦恼的父类子类/父类指针子类指针转换的问题我有class A{int m_a}class B:public A{char m_b}A a

一直苦恼的父类子类/父类指针子类指针转换的问题
我有
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是不完整的,可能出问题的。
[解决办法]

探讨
1楼大大以说了。可以用内存模型来考虑,子类占用的内存至少不能小于父内,那么子类转父类肯定是要被切片。的。C++是门成熟的语言,用你现实生活来思考他吧。

[解决办法]
a能否转换为b 
a不能转换为b当然你要强制转换也行,但是后果自负

b能否转换为a 
b转换为a没问题,会发生截断

pa能否转换为pb 
你将pa转换为pb没问题,但是你一旦调用了B里面特有的成员的时候你会出错

pb能否转换为pa
这个当然没问题 

热点排行