Qt中的dynamic_cast主要用于在运行时进行安全的类型转换。下面是一个动态类型转换的例子:

#include <QCoreApplication>
#include <QDebug>

class Animal {
public:
    virtual ~Animal() {}
};

class Dog : public Animal {
public:
    void bark() {
        qDebug() << "Barking...";
    }
};

class Cat : public Animal {
public:
    void meow() {
        qDebug() << "Meowing...";
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Animal* animal = new Dog();
    Dog* dog = dynamic_cast<Dog*>(animal);
    if (dog) {
        dog->bark();
    } else {
        qDebug() << "Not a dog!";
    }

    delete animal;

    return a.exec();
}

在上面的例子中,Animal是一个基类,Dog和Cat是继承自Animal的派生类。通过dynamic_cast,我们将Animal类型的指针转换为Dog类型的指针。如果转换成功,我们就可以调用Dog类的成员函数;如果转换失败,我们会得到一个空指针。

在这个例子中,我们在堆上创建了一个Dog对象,并将其地址赋给了Animal类型的指针。然后,我们使用dynamic_cast将该指针转换为Dog类型的指针。由于Dog对象实际上是一个Dog类型的对象,所以转换是成功的。因此,我们可以安全地调用Dog类的成员函数bark()。

请注意,dynamic_cast只能用于具有多态性的类层次结构中

Qtdynamic_cast应用例子

原文地址: https://www.cveoy.top/t/topic/i055 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录