[geloest, danke]Qt Example: Was macht this->pen = pen;

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

[geloest, danke]Qt Example: Was macht this->pen = pen;

Beitrag von joebar »

Hallo,

ich beziehe mich auf http://doc.trolltech.com/4.2/painting-basicdrawing.html

Dort gibt es diverse Funktionen der Art:

Code: Alles auswählen

 void RenderArea::setPen(const QPen &pen)  {
     this->pen = pen; // diese Zeile 
     update();
 }

In RenderArea.h gibt es eine private Deklarierung QPen pen;

Was macht die Zeile "this -> ...". "this" bezieht sich doch auf die aktuelle Instanz von RenderArea, dort rufe ich die "funktion" pen auf? pen ist ein Objekt und keine Funktion.

Danke.
Zuletzt geändert von joebar am 25. Juni 2008 09:12, insgesamt 1-mal geändert.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

this bezieht sich auf die aktuelle Instanz von RenderArea, das ist richtig. Aber wie kommst du darauf das "pen" eine Funktion ist?
http://doc.trolltech.com/4.2/painting-b ... rea-h.html
Dort kannst du sehen das Pen einfach ein QPen von RenderArea ist. Und dieses Pen-Objekt überschreibst du jetzt mit dem in der Funktion übermittelten neuen Pen.
joebar
Beiträge: 177
Registriert: 3. Oktober 2006 02:04

Beitrag von joebar »

Eben pen ist ein Objekt, Funktion war in "" geschrieben und danach stand doch auch "pen ist ein Objekt und keine Funktion".

Wo ich das Problem habe ist, dass ich die Funktion aufrufe mit einem Argument welches pen heisst, gleichzeitig nutze ich in der Funktion meine Klassenvariable pen. Sprich ich habe zwei verschiedene Objekte die beide pen heissen. Wenn ich "this-> pen = pen" mal anders schreiben darf als "this -> pen1 = pen2" waere pen1 das pen aus der Klasse und das pen2 das was ich der Funktion uebergebe, oder? Woher weiss mein compiler das?

Danke!
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Es "gewinnt" immer das "nähere" Objekt. Pen als Argument wird direkt übergeben, also ist pen am nächsten. Du kannst aber auch direkt auf das "weiter entfernte" pen zugreifen, nämlich die Member Variable von "this".
this->pen = Die Membervariable pen von "this".
pen = Das lokale Pen Objekt (also das Argument, gibt es das Argument nicht oder wäre anders benannt, wäre auch dies gleich this->pen). Dies ist angemerkt schlechter Stil, die Bezeichnungen sollten sich schon unterscheiden. ;)
Antworten