主题:可以获得父类指针,什么方法可以得到该父类子类的子类的指针?
cissyncc
[专家分:0] 发布于 2010-05-06 22:06:00
我现在编程,利用到一个库。现在可以得到该库中一个父类的指针,我想得到该父类的子类的子类的指针,有什么方法吗?可以强制转换吗?怎么做,求赐教!!!!
回复列表 (共8个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-05-06 22:59:00
貌似父类指针能指向这个孙类的实例,等cxx来解释……
板凳
cissyncc [专家分:0] 发布于 2010-05-06 23:15:00
是无法实现这个问题吧?我现在是这样认为的
3 楼
cxxcomp [专家分:2370] 发布于 2010-05-06 23:30:00
这个问题不是很明确。真的。不过为什么不把问题分解开呢,我觉得这个问题,好似提的都不怎么明确。应该和库本身关系不大。看看C++是如何处理类似的问题吧。
4 楼
雪光风剑 [专家分:27190] 发布于 2010-05-06 23:55:00
说明白为什么需要这么做,和到底想要做什么吧
5 楼
cxxcomp [专家分:2370] 发布于 2010-05-07 19:12:00
[quote]
是无法实现这个问题吧?我现在是这样认为的[/quote]
恩?!
你给我具体问题,我给你把它变成代码。:)
6 楼
eastcowboy [专家分:25370] 发布于 2010-05-14 01:49:00
子类的子类,也是可以通过static_cast、dynamic_cast来做的。C风格的转换也可以,它的效果与static_cast一样。
顺便一提,reinterpret_cast看起来也没问题(编译正确,很多时候运行好像也正确),但是却是没有保证的。标准没有规定这样做会得到正确结果,事实上,用VC做实验,如果C继承了A, B,则reinterpret_cast把B*转化为C*会出错,而static_cast和dynamic_cast则不会出错。
如果先把B*转化为void*,再把void*通过static_cast转化为C*。则行为与reinterpret_cast类似,会出现错误。
[code=c]class A
{
public:
virtual ~A() {}
};
class B : public A
{
};
class C : public B
{
};
int main()
{
A* p = new C;
C* p1 = static_cast<C*>(p);
C* p2 = dynamic_cast<C*>(p);
delete p;
return 0;
}[/code]
7 楼
cissyncc [专家分:0] 发布于 2010-05-17 19:41:00
问题已解决,谢谢大家关心!
8 楼
单口和群口 [专家分:0] 发布于 2010-05-17 21:59:00
我是个看贴回贴的人!
我来回复