C ++为什么返回此?

时间:2019-03-16 22:02:43

标签: c++ qt polymorphism

我写了一个类'clsFileThread',该类派生自'clsThread'。 “ clsThread”源自“ QThread”

在另一个类中,我编写了一个访问方法,该方法返回指向“ QObject”的指针。在此方法中,您需要执行以下操作:

QObject* clsScriptHelper::use(QJsonValue strModule) {
    QObject* pobjModule = nullptr;

    if (strModule.toString().compare("fileIO") == 0) {
        pobjModule = new clsFileThread();
    }
    return pobjModule;
}

返回指针时,它是指向“ clsThread”的指针,为什么?我本以为该指针将是QObject类型,然后使用多态性可以访问更高级别的成员和方法,但事实并非如此。

我想做的是通过'use'返回的指针访问'clsFileThread'的方法,但这不起作用。

1 个答案:

答案 0 :(得分:0)

返回的指针是QObject*类型的,即使对象本身是clsFileThread*(因为这就是定义use方法的方式)。因此,直接访问返回值将不允许访问clsFileThread方法。

类继承看起来像这样:

clsFileThread > clsThread > QThread > QObject

如果您想像一个clsFileThread一样访问返回对象,则可以dynamic_cast返回值,例如:

QObject* obj = clsScriptHelper::use(whatever);
clsFileThread* clsFileThreadObject = dynamic_cast<clsFileThread*>(obj);
if (clsFileThreadObject)
{
   clsFileThreadObject->doSomething();
}