#include <iostream>
#include <typeinfo>
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
void derivedFunction() {
std::cout << "Derived function called" << std::endl;
}
};
int main() {
Base* basePtr = new Derived();
// 使用 dynamic_cast 进行安全的向下转型
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
if (derivedPtr) {
derivedPtr->derivedFunction(); // 如果转型成功,调用派生类的方法
} else {
std::cout << "dynamic_cast failed" << std::endl; // 如果转型失败
}
delete basePtr;
return 0;
}
dynamic_cast
是 C++ 中用于安全地进行类型转换的关键字,主要用于多态类型的指针或引用之间的转换。Base
类是一个基类,并且它有一个虚析构函数(确保派生类的对象在通过基类指针删除时正确析构)。Derived
类是从 Base
类继承而来的派生类,包含一个特有的成员函数 derivedFunction
。main
函数中,我们创建了一个 Derived
对象,并通过基类指针 basePtr
指向它。dynamic_cast
将 basePtr
转换为 Derived*
类型的指针 derivedPtr
。如果转换成功,则可以调用 Derived
类中的特有方法;如果转换失败(例如 basePtr
实际指向的是 Base
对象),则 derivedPtr
会是 nullptr
,从而避免了非法访问。这样可以确保类型转换的安全性,避免潜在的运行时错误。
上一篇:c++sort函数头文件
下一篇:c++多线程实现的四种方式
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站