Seite 1 von 1

[Gelöst] Methode aus abgeleiteter Basis Klasse

Verfasst: 5. April 2011 13:28
von bronko
Hallo,

folgender Code:

Code: Alles auswählen

#include <QObject>

class base : public QObject
{
public:
    base();
    virtual QString getS();
};

class upper : public base
{
public:
    upper();
    virtual QString getS();
};

Code: Alles auswählen

#include <QDebug>
#include "klasse.h"


base::base()
{
    qDebug() << "base ausgabe: " << getS();
}


QString base::getS()
{
    return QString("base");
}


upper::upper()
{
    qDebug() << "upper ausgabe: " <<  getS();
}

QString upper::getS()
{
    return QString("upper");
}

Code: Alles auswählen

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    upper* up = new upper;

    return a.exec();
}
Ich habe Qt 4.7.2 sowie den MS Compiler.
Die Ausgabe ist:
base ausgabe: "base"
upper ausgabe: "upper"

Warum gibt er nicht das aus:
base ausgabe: "upper"
upper ausgabe: "upper"

Was ist hier falsch? Ich möchte den Wert aus der abgeleiteten Klasse haben.

Danke+Gruß
Bronko

Verfasst: 5. April 2011 13:59
von solarix
virtuelle Methoden funktionieren in Konstruktoren noch nicht (respektive: das "Überladen" funktioniert noch nicht, weil die dazu benötigte VTable erst nachher aufgesetzt wird). Abhilfe kannst du nur mit einer init-Methode schaffen:

Code: Alles auswählen

upper* up = new upper; 
up->init();
Meist ist das ok so, weil ein Objekt im CTor ja nur "sich selbst" initialisieren soll (seine Membervariabeln aufsetzen). Komplexere Geschichten werden daher (und auch aus anderen Gründen, wie z.B. "Exceptions" oder "Qt-Signals") in normale Methoden ausgelagert (z.B. "open()"-Methoden von File- oder Datenbank-Klassen).

hth..

Verfasst: 5. April 2011 14:01
von bronko
Hat sich erledigt,

hab das gefunden: http://support.microsoft.com/kb/125749

Problem ist das die abgeleitete Klasse moch gar nicht instanziert war als ich im CTor bereits auf die Methode zugreifen wollte.

Verfasst: 5. April 2011 14:02
von bronko
Danke Solarix, das bestätigt meinen Verdacht.
Wie setze ich das auf "Gelöst" ?

Verfasst: 5. April 2011 14:04
von solarix
Erster Beitrag editieren (Titel ändern) :wink: