QObject基类到继承对象的C++类型转换

C++ type conversion of a QObject base class to an inherited object

本文关键字:C++ 类型转换 对象 继承 基类 QObject      更新时间:2023-10-16

我有类A(..):QObject(..)B(..):A(..),并创建一个稍后应转换/扩展为类型B:的对象A

A* obA = new A(...);
obA->setMember(true);
...
#ifdef EITHER
obA = new B(...); // --> shouldBeTrue == false, see below
#else
*obA = B(...);  // --> Error - see question
#endif
bool shouldBeTrue = obA->getMember();

原因是在创建基础对象时,我还不知道最终的类型。我希望能够用更精细的类型来扩展这个对象,然后可以访问基本对象成员。

我知道C++支持类型转换,但我的代码在调用QObject的复制运算符时导致了一个错误,该运算符被故意设置为私有的,以防止复制QObject"树"。

这是一个概念问题吗?我是不是搞错了?


编辑:添加了另一行,它编译了,但没有像我预期的那样。

克隆QObject是概念错误。参见:QObject文档

要从B : public A的新实例访问A : public QObject的现有实例,可以在构造函数中将指向现有实例的指针传递给新实例。

A *a = new A();
B *b = new B(a);

B的构造函数中,您可以对A的实例执行任意操作,例如复制其数据部分。