首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中查找对象的类型

在C++中查找对象的类型
EN

Stack Overflow用户
提问于 2008-12-09 05:06:52
回答 9查看 343.3K关注 0票数 166

我有一个类A和另一个继承自它的类B。我重写了一个函数,这个函数接受类型A的对象作为参数,所以我必须接受一个A。然而,我后来调用了只有B有的函数,所以我想返回false,如果传递的对象不是类型B,就不继续。

找出传递给函数的对象是哪种类型的最好方法是什么?

EN

回答 9

Stack Overflow用户

发布于 2010-12-01 22:04:40

动态类型转换最适合您对问题的描述,但我只想补充一句,您可以通过以下命令找到类类型:

#include <typeinfo>

...
string s = typeid(YourClass).name()
票数 170
EN

Stack Overflow用户

发布于 2008-12-09 05:09:06

这就是所谓的RTTI,但是您几乎肯定想在这里重新考虑您的设计,因为找到类型并基于它做特殊的事情会使您的代码更加脆弱。

票数 31
EN

Stack Overflow用户

发布于 2016-04-01 02:53:28

为了完成,我将在Robocide的基础上构建build,并指出typeid可以单独使用,而不使用name():

#include <typeinfo>
#include <iostream>

using namespace std;

class A {
public:
    virtual ~A() = default; // We're not polymorphic unless we
                            // have a virtual function.
};
class B : public A { } ;
class C : public A { } ;

int
main(int argc, char* argv[])
{
    B b;
    A& a = b;

    cout << "a is B: " << boolalpha << (typeid(a) == typeid(B)) << endl;
    cout << "a is C: " << boolalpha << (typeid(a) == typeid(C)) << endl;
    cout << "b is B: " << boolalpha << (typeid(b) == typeid(B)) << endl;
    cout << "b is A: " << boolalpha << (typeid(b) == typeid(A)) << endl;
    cout << "b is C: " << boolalpha << (typeid(b) == typeid(C)) << endl;
}

输出:

a is B: true
a is C: false
b is B: true
b is A: false
b is C: false
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/351845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档