Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c++ rtti

作者:战神再世   发布日期:2025-07-16   浏览:42

#include <iostream>
#include <typeinfo>

class Base {
public:
    virtual ~Base() {} // 必须有虚函数,RTTI 才能工作
};

class Derived : public Base {
public:
    void show() {
        std::cout << "Derived class" << std::endl;
    }
};

int main() {
    Base* basePtr = new Derived();

    // 使用 typeid 检查类型
    if (typeid(*basePtr) == typeid(Derived)) {
        std::cout << "basePtr points to a Derived object" << std::endl;
    } else {
        std::cout << "basePtr does not point to a Derived object" << std::endl;
    }

    // 使用 dynamic_cast 安全地向下转型
    Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
    if (derivedPtr != nullptr) {
        derivedPtr->show();
    } else {
        std::cout << "basePtr does not point to a Derived object" << std::endl;
    }

    delete basePtr;
    return 0;
}

解释说明:

  1. RTTI(Run-Time Type Information):C++ 的 RTTI 提供了在运行时检查对象类型的机制。它主要包括 typeiddynamic_cast
  2. typeid 运算符:用于获取对象的类型信息。它可以用来比较两个对象是否属于同一类型。
  3. dynamic_cast:用于安全地进行基类指针到派生类指针的转换。如果转换失败,dynamic_cast 返回 nullptr
  4. 虚函数:为了使 RTTI 正常工作,基类必须至少有一个虚函数(通常是析构函数),这样编译器才会为该类生成类型信息。

以上代码展示了如何使用 RTTI 来检查和转换指针类型。

上一篇:c++ #if

下一篇:c++ map排序

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++freopen怎么用

c++ 获取系统时间

c++进制转换函数

c++ tcp

c++ gcd函数

c++ cli

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站