C++ Kurze Erläuterung des Konstruktors...

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
759
Hallo miteinander,

könnt ihr mir bitte kurz den Konstruktor erläutern:

Code:
GUI::GUI(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::GUI)
{
    ui->setupUi(this);
}

Ich komme aus der JAVA Welt und bei mir sah ein Konstruktor imner so aus:

Auto(int leistung, int anzahl raeder){}

Daher weiß ich nicht, was die Doppelpunkte und das darauffolgende bedeutet...

vielen Dank

Viele Grüße Ruff :)
 
...ok ich hab die Erkläung hier gefunden:

class Bruch{
public:
Bruch(int z, int n):
zaehler_(z), // Initialisierung von zaehler_
nenner_(n) // Initialisierung von nenner_
{}
private:
int zaehler_;
int nenner_;
};
int main(){
Bruch objekt(7, 10); // Initialisierung von objekt
}
Wie Sie sehen, ist der Methodenrumpf von Bruch::Bruch leer. Die Initialisierung findet in den
beiden Zeilen über dem Rumpf statt. Nach dem Prototyp wird ein Doppelpunkt geschrieben, darauf
folgt eine Liste der Werte, die initialisiert werden sollen. Vielleicht erinnern Sie sich noch, dass es
zur Initialisierung zwei syntaktische Varianten gibt:

Allerdings erschließt sich mir dann nicht, warum folgender Code nicht funktioniert:

Code:
GUI::GUI(QWidget *parent)
{
    QMainWindow(parent);
    ui(new Ui::GUI);
    ui->setupUi(this);
}

:freak:
 
:: ist namespace navigation, bzw. "package navigation" wie "." in java wäre es also "GUI.GUI(..)"
: ist in dem Fall ein "ist ein"

Hier wird Mehrfachvererbung verwendet und die Klasse GUI::GUI mit dem Konstruktor "(QWidget *parent)" als QMainWindow(parent) und ui definiert, wobei die erste Klasse in ihrem Konstruktor gleich das Argument parent auch wieder verwendet.

"ui->setupUi(this)" in Java wäre "ui.setupUi(this)", der Pfeil in C++ ist also der Zugriff zu den Objektmembern.

Der Code ist schlecht.
 
Ruff_Ryders_R schrieb:
Allerdings erschließt sich mir dann nicht, warum folgender Code nicht funktioniert:

Code:
GUI::GUI(QWidget *parent)
{
    QMainWindow(parent);
    ui(new Ui::GUI);
    ui->setupUi(this);
}

:freak:


Kann ich der erklären. ;) Die Zeile

QMainWindow(parent);

tut nicht, was du glaubst. Hier wird nicht etwa der Konstruktor der Basisklasse aufgerufen sondern es wird ein temporäres Objekt der Basisklasse auf dem Stack erzeugt und sofort danach wieder vernichtet. Argumente an den Basisklassenkonstruktor weiterzugeben läßt sich in C++ ausschließlich über Initialisierungslisten bewerkstelligen.
Ergänzung ()

F_GXdx schrieb:
Hier wird Mehrfachvererbung verwendet und die Klasse GUI::GUI mit dem Konstruktor "(QWidget *parent)" als QMainWindow(parent) und ui definiert, wobei die erste Klasse in ihrem Konstruktor gleich das Argument parent auch wieder verwendet.

Auf Mehrfachvererbung läßt sich aus dem Code, den er gepostet hat, nicht schließen. Als Basisklasse wird dort lediglich QMainWindow erwähnt.
 
Zuletzt bearbeitet:
Ich hasse C++...
 
...ich hab leider nur die Hälfte verstanden, was aber wohl eher an meinen Kenntnissen liegen dürfte :(.

Wie müsste denn der Konstruktor aussehen, wenn ich noch zusätzlich ein Objekt der Klasse Auto mit übergeben möchte?
 
Ruff_Ryders_R schrieb:
Code:
GUI::GUI(QWidget *parent, Auto *auto) :    QMainWindow(parent),    ui(new Ui::GUI)
{
    ui->setupUi(this);
}

So???
 
Nein, nicht ganz. ;)

"auto" ist ein reserviertes Schlüsselwort, das an dieser Stelle so nicht auftauchen darf. Nenn's ptrToAuto, und alles ist gut. ;)
 
Argh!! Ich hasse C++...
 

Ähnliche Themen

Zurück
Oben