Qtdynamic_cast应用例子
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只能用于具有多态性的类层次结构中
原文地址: https://www.cveoy.top/t/topic/i055 著作权归作者所有。请勿转载和采集!