C++ 运行时类型信息与继承技巧探索

2023年 11月 21日 47.9k 0

运行时类型特性

相比于其他面向对象语言,C++更倾向于编译时处理。如你之前所学,重写方法之所以有效,是因为方法与其实现之间存在一层间接关系,而不是因为对象内置了对其所属类的知识。然而,C++中确实有一些特性提供了对对象的运行时视图。这些特性通常被归为一组功能,称为运行时类型信息(RTTI)。

RTTI提供了许多有用的特性,用于处理对象的类成员信息。其中一个特性是 dynamic_cast(),它允许你在面向对象的层次结构中安全地在类型之间转换;这在本章前面已经讨论过。在没有虚表(即没有虚方法)的类上使用 dynamic_cast() 会导致编译错误。

有趣且不寻常的继承问题

RTTI的第二个特性是 typeid 运算符,它允许你在运行时查询对象的类型。大多数情况下,你不应该需要使用 typeid,因为基于对象类型有条件地运行的代码最好通过虚方法处理。以下代码使用 typeid 根据对象的类型打印消息:

import ;
class Animal { public: virtual ~Animal() = default; };
class Dog : public Animal {};
class Bird : public Animal {};

void speak(const Animal& animal) {
if (typeid(animal) == typeid(Dog)) {
cout

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论