c++ 基本问题
TObject * p1 = new TObject();
TForm * f = new TForm(Application);
f =(TForm * ) p1;
f->Caption = "";
执行到最后一句出错
为什么
问题点数:8、回复次数:11Top
1 楼FengSC(小猪快跑)回复于 2005-08-01 12:44:48 得分 0
这个代码有问题,f=(TForm*)pl;这句将f赋值为pl,后面的f->Caption相当于调用pl->Caption,而这样显然是错误的。Top
2 楼dufr()回复于 2005-08-01 12:51:48 得分 0
p1不是转成TForm了吗?
Top
3 楼dufr()回复于 2005-08-01 12:54:30 得分 0
如果这样呢
TObject p1 ;
TForm f ;
f = p1;
f.Caption = "";
会出错吗
Top
4 楼FengSC(小猪快跑)回复于 2005-08-01 13:06:55 得分 0
pl被强制转换成了TForm,但是pl还是pl,就象即使给你改了个名字,你还是你。Top
5 楼psc88()回复于 2005-08-01 13:22:14 得分 0
upTop
6 楼Maconel(Maconel)回复于 2005-08-01 16:59:33 得分 0
pl还是一个TObject类,这样转换,只不过是将一个TForm*型的指针指向了它而已。
就好象一辆自行车,你就算给他挂上宝马的标志,它也还是辆自行车。Top
7 楼syd1207(既然选择远方,便只顾风雨兼程。。。)回复于 2005-08-01 17:04:33 得分 0
楼上所言甚是!~Top
8 楼Nocky(漂流)回复于 2005-08-01 20:44:14 得分 0
类型转换在C++中只可以向上转,不可以向下转,就是说只可以把子类对象的指针转换为父类的指针类型,而不可以把父类指针转换成子类的指针,
主跟楼上所说,自行车是父类,派生出宝马,你把宝马转换成自行车是可以的,去掉两个轮子,跟一大堆东西即可,可是你要把自行车转换成字宝马,非要它的第3、4个轮子转,它有没有啊?
Top
9 楼raystone(ray)回复于 2005-08-02 08:28:39 得分 0
pl还是一个TObject类,这样转换,只不过是将一个TForm*型的指针指向了它而已。
就好象一辆自行车,你就算给他挂上宝马的标志,它也还是辆自行车。Top
10 楼sliverpp()回复于 2005-08-02 08:31:56 得分 0
我认为转换时进行显式类型描述是编译器的一种预防措施,对于指针来说,其实质还是制了个地址,而这地址的大小,布局的解释还是根据进行指针定义时使用的类型Top
11 楼dufr()回复于 2005-08-02 08:38:50 得分 0
地址的大小,布局的解释
就是不明白这点Top




