2 christophe123 CHRISTOPHE123 于 2015.06.02 23:20 提问

Dynamic_cast C++类与对象问题 继承和多态问题,求大神修改

Dynamic_cast
Total: 65 Accepted: 22
Time Limit: 1sec Memory Limit:256MB
Description
Three classes A, B and C are shown below:
class A {
public:
virtual ~A() {};
};
class B: public A {};
class C: public B {};
You are to implement a function string verify(A *), such that it returns "grandpa" if the passed-in argument points to a class A object, and "father" for a class B object , "son" for a class C object.
Your submitted source code should include the whole implementation of the function verify, but without any class defined above.
No main() function should be included.
以下是我的代码,请问哪里错了,求大神修改 要用 dynamic_cast 做

string verify(A a){
A*p =& a;
A*a1=dynamic_cast<A
>(p);
B*b1=dynamic_cast(p);
C*c1=dynamic_cast(p);

if(a1!=NULL){
    return "grandpa";
}
if(b1!=NULL){
    return "father";
}
if(c1!=NULL){
    return "son";
}

}

5个回答

gamefinity
gamefinity   Rxr 2015.06.03 06:06
已采纳
  • 1.后面两个dynamic_cast没有类型,不知道是你没有用代码格式问题还是你漏了。
  • 2.a转a就不要cast了吧
  • 3.判断要从小到大。
if(c1!=NULL){
    return "son";
}
else if(b1!=NULL){
    return "father";
}
else /*if(a1!=NULL)*/{
    return "grandpa";
}
caozhy
caozhy   Ds   Rxr 2015.06.02 23:57

之前没有看清楚题目
现在手上没有编译器
参考下这个
http://blog.csdn.net/gogogo/article/details/7073981
和你的类似

LogicTeamLeader
LogicTeamLeader   2015.06.03 15:59
 string verify(A* pa){
    B* pb=dynamic_cast(pa);
    C* pc=dynamic_cast(pa);
    if(pc != NULL)
      return "son";
    if(pb != NULL)
      return "father";
    if(pa != NULL)
      return "grandpa";
    return NULL;
}
a1004032158
a1004032158   2015.06.03 19:07

题目是 verify(A*), 然后就是p是A*, 第一个dynamic_cast〈A〉应该是A*把, 然后后面的判断,跟catch类似,最抽象的在最后,不然恒是第一个

oyljerry
oyljerry   Ds   Rxr 2015.06.02 23:32

你的基类指针要指向子类,然后再用dynamic cast。这才是转换。

Csdn user default icon
上传中...
上传图片
插入图片