如 类B派生于类A ;又有一个函数调用F1()返回值是类A的指针;
常看到下面的用法:
B * pb = (B *) F1();
也就是将父类的指针转换为派生类的指针;
问题是:能这样作基础是什么?
(不知道我说清楚没有)
8 个解决方案
#1
dynamic_cast
指针类型转换
指针类型转换
#2
B * pb = (B *) F1();
这样估计不能通过编译
这样估计不能通过编译
#3
怎会通不过拉
如:
CMyDoc * pDoc = (CMyDoc *)pDocTemplate->GetNextDoc(pos);
如:
CMyDoc * pDoc = (CMyDoc *)pDocTemplate->GetNextDoc(pos);
#4
指针的类型转换十分简单,
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。
如
B * pb = (B *) F1();
那
pb->FunctionOfClassB()能否正确执行?
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。
如
B * pb = (B *) F1();
那
pb->FunctionOfClassB()能否正确执行?
#5
不能
#6
这不就OK了?
指针的类型转换一下而已,没什么大不了的。
指针的类型转换一下而已,没什么大不了的。
#7
俺给你举个例子
int iA = 0;
UINT uB = 1;
iA = (int) uB;
这个你看的懂吧?他们意思差不多。
不知道我说的对不对?
~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月
int iA = 0;
UINT uB = 1;
iA = (int) uB;
这个你看的懂吧?他们意思差不多。
不知道我说的对不对?
~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月
#8
其实大家的说法都是一个意思,只不过没有从一个初学者的角度来解释。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩A、B,你对父亲A说:“我在树林边的空地上有一堆木材,你用那些木材给我做张桌子吧。”这里“树林边的空地上”相当于内存指针指向的地址,木匠A就象父类A;父亲A做了一半以后,你对儿子B又说:“你把树林边的空地上剩下的木材给我做椅子吧。”因为父子都会木匠活,就象类B派生自类A一样,二者数据存放格式相容,所以可以把返回数值为类A强制转换成类B,就象例中一样。如果你对一个铁匠说(即强制转换成其它不相关的类)同样的话,也会因为他不会(即数据存放格式不相容)而失败。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩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);
如:
CMyDoc * pDoc = (CMyDoc *)pDocTemplate->GetNextDoc(pos);
#4
指针的类型转换十分简单,
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。
如
B * pb = (B *) F1();
那
pb->FunctionOfClassB()能否正确执行?
因为指向任何类型的指针,
其指针本身都是同一个类型。
关键是转过去以后能否进行相应的操作。
如
B * pb = (B *) F1();
那
pb->FunctionOfClassB()能否正确执行?
#5
不能
#6
这不就OK了?
指针的类型转换一下而已,没什么大不了的。
指针的类型转换一下而已,没什么大不了的。
#7
俺给你举个例子
int iA = 0;
UINT uB = 1;
iA = (int) uB;
这个你看的懂吧?他们意思差不多。
不知道我说的对不对?
~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月
int iA = 0;
UINT uB = 1;
iA = (int) uB;
这个你看的懂吧?他们意思差不多。
不知道我说的对不对?
~~~~~~~~~~~~~~~~~~~
人生得意需尽欢,不使金尊空对月
#8
其实大家的说法都是一个意思,只不过没有从一个初学者的角度来解释。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩A、B,你对父亲A说:“我在树林边的空地上有一堆木材,你用那些木材给我做张桌子吧。”这里“树林边的空地上”相当于内存指针指向的地址,木匠A就象父类A;父亲A做了一半以后,你对儿子B又说:“你把树林边的空地上剩下的木材给我做椅子吧。”因为父子都会木匠活,就象类B派生自类A一样,二者数据存放格式相容,所以可以把返回数值为类A强制转换成类B,就象例中一样。如果你对一个铁匠说(即强制转换成其它不相关的类)同样的话,也会因为他不会(即数据存放格式不相容)而失败。
我举个例子:
你有一些木材,想请人把它们做成家具,于是你请了两个木匠,他们是父子俩A、B,你对父亲A说:“我在树林边的空地上有一堆木材,你用那些木材给我做张桌子吧。”这里“树林边的空地上”相当于内存指针指向的地址,木匠A就象父类A;父亲A做了一半以后,你对儿子B又说:“你把树林边的空地上剩下的木材给我做椅子吧。”因为父子都会木匠活,就象类B派生自类A一样,二者数据存放格式相容,所以可以把返回数值为类A强制转换成类B,就象例中一样。如果你对一个铁匠说(即强制转换成其它不相关的类)同样的话,也会因为他不会(即数据存放格式不相容)而失败。