Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.07.2007, 21:14

Der this-Zeiger

Ich hätte mal ne Frage zum this-Zeiger.
Und zwar: Der this-Zeiger gilt nur in der Instanz der Klasse, in der er aufgerufen wird, oder?
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

10.07.2007, 21:16

Gilt für was? Der this-Zeiger zeigt auf die Instanz aus der er aufgerufen wird.
@D13_Dreinig

3

10.07.2007, 21:25

Wenn ich z.B in einem Konstruktor den this -Zeiger einer Funktion einer anderen Klasse übergebe, diese als Parameter einen Zeiger der Klasse erwartet in dem ich den Zeiger der anderen Klasse übergebe, auf welche Instanz zeigt dann der this-Zeiger.
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

10.07.2007, 21:34

Dann hast du einen Zeiger auf die Instanz der Klasse auf die der übergebene this-Zeiger zeigte. Du kannst die instanz dann nur nichtmehr über this ansprechen (aus dem Konstruktor raus).
@D13_Dreinig

5

10.07.2007, 21:45

Um etwas klarheit zu verschaffen, hier der Quelltext:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <iostream>

using namespace std;

// Vorwärtsdeklaration

class CWerft;

// Klasse für einen kleinen Jäger

//

class CJaeger
{
public:

    // Methoden

    CJaeger ();
    void Andocken (CWerft *pWert);
};

// Klasse für eine große Raumschiffwerft

//

class CWerft
{
public:

    // Methoden

    CWerft (string sName);
    ~CWerft ();
    void ZeigeName ();

private:

    // Elementvariablen

    CJaeger *m_pBewacher;
    string m_sName;
};

// Definition der Memberfunktionen von CJaeger

//


// Konstruktor

//

CJaeger::CJaeger ()
{
    cout << "Neuer Jaeger erstellt" << endl;
} // Konstruktor


// Andocken

//

void CJaeger::Andocken (CWerft *pWerft)
{
    cout << "Jaeger dockt an" << endl;
    cout << "Die Zielwerft ist: ";

    // Name der Zielwerft anzeigen lassen

    pWerft->ZeigeName ();
    cout << endl;
} // Andocken


// Definition der Memberfunktionen von CWerft

//


// Konstruktor 

//

CWerft::CWerft (string sName)
{
    cout << "Neue Schiffswerft erstellt" << endl;

    // Name merken

    m_sName = sName;

    // Neuen Jäger erstellen und diesen zum

    // eigenen Schutz andocken lassen

    m_pBewacher = new CJaeger ();
    m_pBewacher ->Andocken (this);
} // Konstruktor


// Destruktor

//

CWerft::~CWerft ()
{
    if (m_pBewacher != NULL)
    {
        delete (m_pBewacher);
        m_pBewacher = NULL;
    }

} // Destruktor


// ZeigeName 

//

void CWerft::ZeigeName()
{
    cout << m_sName.c_str () << endl;
} // ZeigeName


// Hauptprogramm

//

int main ()
{
    // Eine neue Werft erstellen. Es wird

    // automatisch ein Jaeger erzeugt und

    // als Bewacher für die Werft eingeteilt

    CWerft ("Werft 01");

    return (0);
} // main-Funktion
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

10.07.2007, 22:49

generell sollte man sich sowas gut überlegen. auch wenn es funktioniert: einfach im konstruktor den this zeiger an irgendwelche funktionen zu übergeben ist allgemein keine sehr gute sache, denn du übergibst damit einen zeiger auf ein noch nicht vollständig konstruiertes objekt!!!

7

10.07.2007, 23:06

Also zeigt/verweist dieser this-Zeiger der im Konstruktor übergeben wird auf die Klasse CWerft<- Es ist also der this-Zeiger der Klasse Werft, weil wir ihn im konstruktor der CWerft benutzen?
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

10.07.2007, 23:09

So kompliziert ist das doch garnich. Der this Zeiger ist ein Zeiger der auf das eigene Objekt zeigt (das Objekt in dem er verwendet wird). Übergibst du den this-Zeiger an eine Funktion die einen entsprechenden Zeiger erwartet wird der Zeiger kopiert und du kannst die Kopie in der Funktion verwenden, die tollerweise auch auf das Objekt zeigt auf das auch der this-Zeiger zeigt.

Mehr steckt nicht dahinter. :roll:
@D13_Dreinig

9

10.07.2007, 23:38

Genau das wollte ich doch wissen :D ich muss mich herzlich bei dir für deine Geduld bedanke.
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Werbeanzeige