21xrx.com
2024-11-10 00:45:23 Sunday
登录
文章检索 我的文章 写文章
C++如何判断对象类型?
2023-06-29 16:15:17 深夜i     --     --
C++ 对象类型 判断

C++是一种面向对象的编程语言,因此对象类型的判断是非常关键的。在C++中,我们使用运行时类型识别(RTTI)来判断对象的类型。

RTTI是一种特殊的机制,可以在运行时获取对象的类型信息。在C++中,我们使用两种方式来判断对象类型:typeid运算符和dynamic_cast运算符。

typeid运算符可以用来获取一个对象的类型信息。它的使用方法非常简单,只需要在对象后面紧跟“typeid”关键字即可,例如:


Animal* pAnimal = new Dog();

if (typeid(*pAnimal) == typeid(Dog))

  cout << "pAnimal is a dog." << endl;

else

  cout << "pAnimal is not a dog." << endl;

这段代码创建了一个Animal类型的指针pAnimal,然后将其指向一个Dog类型的对象。接着,使用typeid运算符来判断pAnimal所指向的对象类型是否为Dog类型。

如果是,则输出“pAnimal is a dog.”,否则输出“pAnimal is not a dog.”。在运行时,typeid运算符会返回一个type_info类型的对象,它包含了对象的类型信息。

另一种方式是使用dynamic_cast运算符。它可以将一个指向基类(或共性类)的指针强制转换成指向派生类对象的指针。如果这个转换失败了,即指向的对象不是派生类的对象,dynamic_cast会返回一个空指针。

例如:


Animal* pAnimal = new Dog();

Dog* pDog = dynamic_cast<Dog*>(pAnimal);

if (pDog != nullptr)

  cout << "pAnimal is a dog." << endl;

else

  cout << "pAnimal is not a dog." << endl;

这段代码也创建了一个Animal类型的指针pAnimal,然后将其指向一个Dog类型的对象。接着,使用dynamic_cast运算符将其强制转换成Dog类型的指针pDog。

如果转换成功,则输出“pAnimal is a dog.”,否则输出“pAnimal is not a dog.”。需要注意的是,在使用dynamic_cast时,需要将基类的指针或引用指向的对象实际上是派生类的对象。

综上所述,C++中判断对象的类型有两种方式:typeid运算符和dynamic_cast运算符。程序员可以根据实际需求选择合适的方式来判断对象类型。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复