我有类A(..):QObject(..)
和B(..):A(..)
并创建一个对象A,以后应该转换/扩展到类型B:
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"树"。
这是一个概念性问题吗?我的指针错了吗?
<小时/> 编辑:添加替代行,编译但不按预期执行。
答案 0 :(得分:0)
克隆QObject
是概念错误。请参阅:QObject
documentation
要从A : public QObject
的新实例访问B : public A
的现有实例,您可以将指向现有实例的指针传递给构造函数中的新实例。
A *a = new A();
B *b = new B(a);
在B
的构造函数中,您可以使用A
的实例执行任何操作,例如复制其数据部分。