seltsamer Konstruktor

xkris

Mitglied
Hallo

Ich habe folgendes Programm aus einem Qt-Tutorial und verstehe ein paar Dinge nicht so ganz

Code:
#include <QApplication>
 #include <QFont>
 #include <QPushButton>
 #include <QWidget>

 class MyWidget : public QWidget
 {
 public:
     MyWidget(QWidget *parent = 0);
 };

 MyWidget::MyWidget(QWidget *parent)
     : QWidget(parent)
 {
     setFixedSize(200, 120);

     QPushButton *quit = new QPushButton(tr("Quit"), this);
     quit->setGeometry(62, 40, 75, 30);
     quit->setFont(QFont("Times", 18, QFont::Bold));

     connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
 }

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     MyWidget widget;
     widget.show();
     return app.exec();
 }

auch hier zu finden: http://doc.trolltech.com/4.3/tutorial-t4.html


Eigentlich geht es nur um die Zeile:

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)

Mir ist bekannt, dass man hinter dem Doppelpunkt Membervariablen Werte zuweisen kann und sich damit die Zuweisungsanweisung innerhalb des Funktionsrumpfes spart. Aber das was hier gemacht wird kapiere ich nicht. Das Programm funktioniert übrigens auch, wenn ich : QWidget(parent) auskommentiere.

Ausserdem wird in der main eine Instanz der Klasse MyWidget erzeugt, ohne das etwas an den Konstruktor übergeben wird. Wenn man sich jedoch dir Implementierung des Konstruktors anschaut wird eigentlich die Adresse auf eine Variable vom Typ QWidget erwartet.

Ich versuche schon seit geraumer Zeit zu verstehen was hier gemacht wird, komme aber nicht so richtig dahinter. Wäre nett, wenns mir jemand erklären könnte

Gruß
Kristian
 
Hallo Kristian,

du solltest dir vielleicht nochmal die Grundlagen von C++ anschauen ...

In deinem Fall wird nach dem Doppelpunkt wird der Konstruktor der Basisklasse aufgerufen; eine gängige Praxis.

Zu deiner zweiten Frage schaue die mal die Deklaration des Konstrukturs von "MyWidget" an. Hier wird ein Default-Wert für den Parameter verwendet, so dass bei der Instanzierung nur dann ein Parameter übergeben werden muss, wenn er vom Default-Wert abweichen soll.

Gruß
MCoder
 
Hallo Kristian,

du solltest dir vielleicht nochmal die Grundlagen von C++ anschauen ...

In deinem Fall wird nach dem Doppelpunkt wird der Konstruktor der Basisklasse aufgerufen; eine gängige Praxis.

Zu deiner zweiten Frage schaue die mal die Deklaration des Konstrukturs von "MyWidget" an. Hier wird ein Default-Wert für den Parameter verwendet, so dass bei der Instanzierung nur dann ein Parameter übergeben werden muss, wenn er vom Default-Wert abweichen soll.

Gruß
MCoder

Hi MCoder

Danke für deine Hilfe. Ich beschäftige mich jetzt seit ca. 4 Monaten relativ viel mit C++ aber das war mir neu.
Wenn ich in der Deklaration des Konstruktors default Parameter eingeben kann, funktioniert das dann auch für normale Funktionen bzw. Metohden?

Gruß
Kristian
 
Zurück