如何检查C 中的对象类型

How to check the Object Type in c++

本文关键字:对象 类型 何检查 检查      更新时间:2023-10-16

例如,我们有一个动物类,我们创建了其他一些类,例如狮子级,老虎班等。我已经列出了动物类的列表,我想根据列表中每个成员的类的类型横渡列表并处理列表。

Class Animal
Class Tiger :: public Animal{}
Class Lion :: public Animal{}
list<Animal> l;
Tiger T;
Lion L;
l.push_back(T); l.push_back(L);
if the top member of the list is Tiger print"ITs a tiger"
else print"something"

简单地,我想检查创建的实例的类型。我不知道该怎么做。

这称为rtti,这不是很好的编码实践。

这样说,如果您绝对想知道类型的类型,可以做

if (typeid(myanimal) == typeid(Tiger)) {
    // Do something tiger-like
}

在您的情况下,我建议的是与所有Animal的通用接口,例如sayHello()方法。你会有

class Animal {
    void sayHello() = 0;
    // Other things
}

Tiger中,这将是

Tiger::sayHello() {
    cout << "Hello I'm a Tiger!" << endl;
}

然后,从您的vector<Animal*>(您需要使用指针),只需调用

myAnimal->sayHello();

您可以检查类型(typeid),是的,但是您不需要。

您只能持有std::list<std::unique_ptr<Animal> >并在Animal中具有virtual方法。这样,您就可以利用多态性。

class Animal
{
public: 
    virtual void print() = 0;
};
class Tiger : Animal
{
    virtual void print() { std::cout << "I'm a tiger"; }
};
Animal* pA = new Tiger;
pA->print(); // prints tiger

使用Dynamic_cast并检查结果是否有效。但!!!!!!!您通常是一个不好的做法:在您的情况下,在基类中声明虚拟功能更好虚拟std :: String printme()const = 0;并在每个类中实现它。