gpt4 book ai didi

c++ - 什么是 qobject_cast?

转载 作者:可可西里 更新时间:2023-11-01 15:34:35 25 4
gpt4 key购买 nike

谁能用尽可能简单的术语(或尽可能简单)解释什么 qobject_cast是,它的作用以及为什么我们需要将一种类类型转换为另一种类类型?

比如,我在转换 int 的意义上进行了类型转换作为charQString也许使用 QMessageBox , 但为什么要分到不同的类中呢?

最佳答案

在你开始学习之前qobject_cast也就是说,您需要知道 C++ 的 dynamic_cast 是什么是。动态 Actor 就是关于 polymorphism .

C++ 的动态转换使用 RTTI (运行时类型信息)来转换对象。但是 qobject_cast 在没有 RTTI 的情况下执行此操作。

什么是动态转换?

例如,假设我们有一个汽车工厂函数。像这样:

Car* make_car(string brand){
if(brand == "BMW"){
return new BmwCar;
}
if(brand == "Audi"){
return new AudiCar;
}
return nullptr;
}

注意 BmwCarAudiCar 类继承 Car 类。使用此功能,我们可以仅使用一个功能来制造不同的汽车。例如:

string brand;
cin >> brand;
Car *car = make_car(brand);

BmwCar *bmw = dynamic_cast<BmwCar*>(car);
if (bmw != nullptr) {
cout << "You've got a BMW!";
}

AudiCar *audi = dynamic_cast<AudiCar*>(car);
if (audi != nullptr) {
cout << "You've got a Audi!";
}

如果没有 dynamic_cast,您将无法确定 carBmwCar 还是 AudiCar

dynamic_castqobject_cast 有什么区别?

  • qobject_cast 只能与 QObject 一起使用具有 Q_OBJECT 的派生类宏。

  • qobject_cast 不使用 RTTI。

关于c++ - 什么是 qobject_cast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43994584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com