C++的类型转换(对象转型)

发布于 2024-08-14  34 次阅读


C++的类型转换(对象转型)

其中,type 是转换后的数据类型。下面列出了 C++ 支持的其他几种强制转换运算符,转换的为基类

  • const_cast<type> (expr): const_cast 运算符用于修改类型的 const / volatile 属性。除了 constvolatile 属性之外,目标类型必须与源类型相同。这种类型的转换主要是用来操作所传对象的 const 属性,可以加上 const 属性,也可以去掉 const 属性。
  • dynamic_cast<type> (expr): dynamic_cast 在运行时执行转换,验证转换的有效性。如果转换未执行,则转换失败,如果不能转换,返回nulldynamic_cast 执行动态转换时,type 必须是类的指针、类的引用或者 void*,如果 type 是类指针类型,那么 expr 也必须是一个指针,如果 type 是一个引用,那么 expr 也必须是一个引用。
  • reinterpret_cast<type> (expr): reinterpret_cast 运算符把某种指针强制转换为其他类型的指针。它可以把一个指针转换为一个整数,也可以把一个整数转换为一个指针。
  • static_cast<type> (expr): static_cast 运算符执行非动态转换,整型和浮点型、字符型之间的互相转换,没有运行时类检查来保证转换的安全性。例如,它可以用来把一个基类指针转换为派生类指针。

C++的对象类型储存靠RTTI(储存了对象实际类型信息的功能)(可关闭)

#include <iostream>

class Base {
    virtual void foo() {}
};

class Derived : public Base {
public:
    void derivedFunction() {
        std::cout << "Derived function called!" << std::endl;
    }
};

int main() {
    Base* basePtr = new Derived;
    Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);

    if (derivedPtr) {
        derivedPtr->derivedFunction();  // 成功调用 Derived 类的方法
    } else {
        std::cout << "Conversion failed!" << std::endl;
    }

    delete basePtr;
    return 0;
}
QQ:2219349024
最后更新于 2024-08-14