一道C++笔试题,请教 一下懂C++的哈。希望高手们不吝赐教。谢谢!

A类是一个抽象类,B类和C类都是A类的子类.请实现一个函数.intget_subclass(constA*pA)若pA指向B类对象则返回1,若指向C类对象则返回2,否则返... A类是一个抽象类,B类和C类都是A类的子类.
请实现一个函数. int get_subclass(const A* pA)
若pA指向B类对象则返回1,若指向C类对象则返回2,否则返回0.
注:不能修改A,B,C.
展开
 我来答
孟羽然
2013-06-02 · TA获得超过2977个赞
知道小有建树答主
回答量:1308
采纳率:70%
帮助的人:605万
展开全部

如果你想要在运行时进行类型检查(Run-Time Type Information ,RTTI)),那就必须要用到c++的dynamic_cast或typeid两个运算符。

但想要这两个运算符生效,类必须是支持多态的 => 也就是说要有虚函数表 => 也就是说,类里至少要有一个虚函数(virtual)。

这点不满足就没法进行动态检查。


如果满足以上条件,可以这样做:

#include <iostream>

using namespace std;

class Base { public: virtual ~Base() {}; };
class A : public Base { };
class B : public A { };
class C : public A { };
class D : public Base { };

int get_subclass(Base* p) {
    if (dynamic_cast<B*>(p)) {
        return 1;
    }   
    if (dynamic_cast<C*>(p)) {
        return 2;
    }   
    if (dynamic_cast<A*>(p)) {
        return 0;
    }   
    return -1; 
}

int main() {
    Base *pa = new A();
    Base *pb = new B();
    Base *pc = new C();
    Base *pd = new D();
    cout << "pa is " << get_subclass(pa) << endl; 
    cout << "pb is " << get_subclass(pb) << endl; 
    cout << "pc is " << get_subclass(pc) << endl; 
    cout << "pd is " << get_subclass(pd) << endl; 
    delete pa; 
    delete pb; 
    delete pc; 
    delete pd; 
    return 0;
}
viichi
2013-06-02 · TA获得超过355个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:215万
展开全部
int get_subclass(const A *pA) {
    if (dynamic_cast<const B *>(pA)) {
        return 1;
    }
    if (dynamic_cast<const C *>(pA)) {
        return 2;
    }   
    return 0; 
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
memo_阿勒秋
2013-06-02 · TA获得超过143个赞
知道小有建树答主
回答量:87
采纳率:0%
帮助的人:111万
展开全部
int get_subclass(const A *pa)
{
    if (typeid(*pa) == typeid(B))
        return 1;
    else if (typeid(*pa) == typeid(C))
        return 2;
    else
        return 0;       
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式