学习vc的一个疑惑??

时间:2021-09-30 00:34:59
学习vc的一个疑惑??

如 类B派生于类A  ;又有一个函数调用F1()返回值是类A的指针;
常看到下面的用法:
B * pb = (B *) F1();

也就是将父类的指针转换为派生类的指针;

问题是:能这样作基础是什么?

(不知道我说清楚没有)

8 个解决方案

#1


dynamic_cast

指针类型转换

#2


B * pb = (B *) F1();
这样估计不能通过编译

#3


怎会通不过拉
如:
CMyDoc * pDoc = (CMyDoc *)pDocTemplate->GetNextDoc(pos);

#4


指针的类型转换十分简单,
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。


B * pb = (B *) F1();

pb->FunctionOfClassB()能否正确执行?

#5


不能

#6


这不就OK了?
指针的类型转换一下而已,没什么大不了的。

#7


俺给你举个例子

int iA = 0;
UINT uB = 1;

iA = (int) uB;

这个你看的懂吧?他们意思差不多。


不知道我说的对不对?

~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月

#8


其实大家的说法都是一个意思,只不过没有从一个初学者的角度来解释。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩A、B,你对父亲A说:“我在树林边的空地上有一堆木材,你用那些木材给我做张桌子吧。”这里“树林边的空地上”相当于内存指针指向的地址,木匠A就象父类A;父亲A做了一半以后,你对儿子B又说:“你把树林边的空地上剩下的木材给我做椅子吧。”因为父子都会木匠活,就象类B派生自类A一样,二者数据存放格式相容,所以可以把返回数值为类A强制转换成类B,就象例中一样。如果你对一个铁匠说(即强制转换成其它不相关的类)同样的话,也会因为他不会(即数据存放格式不相容)而失败。

#1


dynamic_cast

指针类型转换

#2


B * pb = (B *) F1();
这样估计不能通过编译

#3


怎会通不过拉
如:
CMyDoc * pDoc = (CMyDoc *)pDocTemplate->GetNextDoc(pos);

#4


指针的类型转换十分简单,
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。


B * pb = (B *) F1();

pb->FunctionOfClassB()能否正确执行?

#5


不能

#6


这不就OK了?
指针的类型转换一下而已,没什么大不了的。

#7


俺给你举个例子

int iA = 0;
UINT uB = 1;

iA = (int) uB;

这个你看的懂吧?他们意思差不多。


不知道我说的对不对?

~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月

#8


其实大家的说法都是一个意思,只不过没有从一个初学者的角度来解释。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩A、B,你对父亲A说:“我在树林边的空地上有一堆木材,你用那些木材给我做张桌子吧。”这里“树林边的空地上”相当于内存指针指向的地址,木匠A就象父类A;父亲A做了一半以后,你对儿子B又说:“你把树林边的空地上剩下的木材给我做椅子吧。”因为父子都会木匠活,就象类B派生自类A一样,二者数据存放格式相容,所以可以把返回数值为类A强制转换成类B,就象例中一样。如果你对一个铁匠说(即强制转换成其它不相关的类)同样的话,也会因为他不会(即数据存放格式不相容)而失败。