
一道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. 展开
请实现一个函数. int get_subclass(const A* pA)
若pA指向B类对象则返回1,若指向C类对象则返回2,否则返回0.
注:不能修改A,B,C. 展开
3个回答
展开全部
如果你想要在运行时进行类型检查(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;
}
展开全部
int get_subclass(const A *pA) {
if (dynamic_cast<const B *>(pA)) {
return 1;
}
if (dynamic_cast<const C *>(pA)) {
return 2;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int get_subclass(const A *pa)
{
if (typeid(*pa) == typeid(B))
return 1;
else if (typeid(*pa) == typeid(C))
return 2;
else
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询