[Gelöst] Methode aus abgeleiteter Basis Klasse

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
bronko
Beiträge: 40
Registriert: 19. Mai 2009 15:49

[Gelöst] Methode aus abgeleiteter Basis Klasse

Beitrag 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
Zuletzt geändert von bronko am 5. April 2011 14:21, insgesamt 1-mal geändert.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
Zuletzt geändert von solarix am 5. April 2011 14:02, insgesamt 1-mal geändert.
bronko
Beiträge: 40
Registriert: 19. Mai 2009 15:49

Beitrag 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.
bronko
Beiträge: 40
Registriert: 19. Mai 2009 15:49

Beitrag von bronko »

Danke Solarix, das bestätigt meinen Verdacht.
Wie setze ich das auf "Gelöst" ?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Erster Beitrag editieren (Titel ändern) :wink:
Antworten