JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Zeiger auf eigenes Objekt?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 17.11.2002, 20:42    Titel: Zeiger auf eigenes Objekt? Antworten mit Zitat

Hi,
ich habe folgendes Problem: Ich will das eine Klasse per Funktion einen Zeiger auf sich selbst zurück gibt! Wie soll ich das machen, ich habe schonmal von einen this-Zeiger gehört, weiss allerdings nicht was es mit diesem auf sich hat!

Danke Im Vorraus!

MiracleBoy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 17.11.2002, 20:47    Titel: Antworten mit Zitat

Der this Zeiger ist ein Zeiger auf die eigene Klasse. Also wenn du ne Methode in der Klasse hast, die auf Attribute der Klasse der Methode zugreifen soll, kannst du den this Zeiger verwenden.

Versuch mal das aus
Code:


return this;



weiß aber nicht obs klappt...


Cu,
VH
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 17:28    Titel: Antworten mit Zitat

Das funktioniert schon, aber der This-Zeiger ist nur solange gültig, wie die Instanz der Klasse besteht - also wenn man z.B. ein Objekt der Klasse anlegt. Allerdings ist das Objekt selbst auch schon der this-Zeiger...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 19:50    Titel: Antworten mit Zitat

Könntest du nochmal genauer ausdrücken was du meinst...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 20:04    Titel: Antworten mit Zitat

Code:

class TestClass {
public:
  TestClass();
  virtual ~TestClass();

  TestClass *GetKlassenZeiger() { return this; };
};

TestClass *MeineKlasse; // Objekt, aber ungültig.
MeineKlasse=new TestClass(); // Objekt, gültig.

MeineKlasse->GetKlassenZeiger(); // Gibt den gleichen Wert zurück, der auch in MeineKlasse steht - es ist ein Zeiger auf DIESE Instanz der Klasse.
// Es sollte auch folgendes nun Klappen:
MeineKlasse->GetKlassenZeiger()->GetKlassenZeiger()->GetKlassenZeiger(); // Ist in diesem Beispiel zwar unsinnig, aber Syntaktisch richtig.

delete MeineKlasse; // Zerstört die Instanz von TestClass, MeineKlasse ist nun ungültig.

MeineKlasse->GetKlassenZeiger(); // Fehler - MeineKlasse ist ja nicht mehr gültig.

TestClass::GetKlassenZeiger(); // Gibt zwar einen Zeiger zurück, der aber im Moment, da er gespeichert wird schon wieder ungültig ist, da kein Objekt angelegt wurde.

Berichtigt mich, wenn ich Unsinn erzähle, aber meines erachtens sollte es so stimmen...

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}


Zuletzt bearbeitet von AFE-GmdG am 18.11.2002, 20:12, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 20:09    Titel: Antworten mit Zitat

So sollte es aber immer möglich sein...
Code:

TestClass MeineKlasse;


MeineKlasse->GetKlassenZeiger();


... oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 20:15    Titel: Antworten mit Zitat

Nicht ganz: MeineKlasse ist hier eine Variable, kein Ziger. Daher muß es folgendermaßen aussehen:
Code:

TestClass MeineKlasse;

MeineKlasse.GetKlassenZeiger(); // . statt -> !!!

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 20:18    Titel: Antworten mit Zitat

Ich habs einfach von deinem Post rauskopiert und nicht drauf geachtet Wink bin halt zu faul...

Cu,
VH
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 18.11.2002, 20:32    Titel: Antworten mit Zitat

AFE-GmdG hat Folgendes geschrieben:
Code:

TestClass::GetKlassenZeiger(); // Gibt zwar einen Zeiger zurück, der aber im Moment, da er gespeichert wird schon wieder ungültig ist, da kein Objekt angelegt wurde.

Das funktioniert nicht (Compilerfehler), denn GetKlassenZeiger() ist nicht statisch. Wäre sie statisch würde es jedoch auch nicht funktionieren weil statische Funktionen ja keine Instanz haben, auf die this Zeigen könnte.
Soviel ich weiß übergibt C++ den this-Zeiger heimlich als letzten Parameter in Memberfunktionen, bei statischen Funktionen wird this nicht übergeben (aus o.g. Gründen).
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 44
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 08:50    Titel: Antworten mit Zitat

Leuchetet ein. Ob der Compiler den this-Zeiger als ersten oder als letzten Parameter übergibt ist implementationsabhängig und wird meines erachtens nirgends im Standard erwähnt. Als Beispiel für die Kurzlebigkeit von this-Zeigern jedoch reichte der zugegebenermaßen falsche Codeschnipsel aber aus, da er so eh nie verwendet werden könnte.

AFE-GmdG
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 14:52    Titel: Antworten mit Zitat

Danke! Also geht es nicht so ganz wie ich es wollte!?
Vielleicht hilft euch das weiter wenn ich mein Problem erläutere: Für die Kollisiionserkennung in einem kleinen Spiel von mir habe ich vor ein statisches Member-Array anzulegen, in dem sich eben alle Klassen mit Zeiger eintragen, damit ich so die Kollisionen intern in der Sprite Klasse testen kann!
Wenn jemnad eine andere/bessere Idee hat kann er sie gerne nennen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 15:14    Titel: Antworten mit Zitat

Müsste doch so gehen:
Code:

TestClass*     PointerArray[NUMBEROFELEMENTS];
TestClass      Klasse;

PointerArray[0] = &Klasse;


Oder irre ich mich da?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 19.11.2002, 17:39    Titel: Antworten mit Zitat

mach es doch so, dass es eine dynamische liste oder ein statisches array gibt, in denen alle gegner gespeichert sind und jeder gegner hat einen (also statischen) zeiger auf die liste oder das array.

kommt zwar dasselbe bei heraus allerdings hast du dann die liste nicht in der gegner klasse drinn sondern als eigenes objekt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 20.11.2002, 14:07    Titel: Antworten mit Zitat

Ja, so muss ich es wohl machen! Mit dem Array in der KLasse, erschien es mir noch etwas praktischer, aber es geht nunmal nicht!
Danke nochmal @all!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.11.2002, 14:22    Titel: Antworten mit Zitat

Du kannsts auch so machen:

Code:


class CBase
{
public:
  CBase();
  ~CBase();

  // bla bla bla

private:
  static CBase * m_pActors[MAXACTORS]; // oder eine Liste oder was auch immer
};


_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum