AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Objekt soll Referenz auf sich zurückliefern
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt soll Referenz auf sich zurückliefern

Ein Thema von pingun · begonnen am 22. Nov 2006 · letzter Beitrag vom 24. Nov 2006
Antwort Antwort
Seite 1 von 2  1 2      
pingun

Registriert seit: 22. Nov 2006
6 Beiträge
 
#1

Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 18:59
Hallo,
ich habe ein Problem und komme nicht weiter.

Ein Objekt soll die Referenz auf sich als Resultat zurückliefern.
Also nach dem Motto. Wenn du getroffen bist, dann liefere dich selbst zurück.
Im aufrufenden Programm kann dann die aktiveFigur auf die getroffene Figur
gesetzt werden.

Wie kann "das Objekt sich selbst zurückliefern?"

Hier der Programmcode einer Methode eines Qbjektes (result := self
funktioniert nicht!):

Code:
function TQuadrat.getroffen (pHPosition: real; pVPosition: real) : TFigur;
begin
   if ((pHPosition > self.gibHPosition) AND (pHPosition < self.gibHPosition+zGroesse)
        AND (pVPosition > self.gibVPosition) AND (pVPosition < self.gibVPosition+zGroesse)) then
   // dies ist die Figur
   begin
     hatStift.zeichneRechteck(10,10);
     result := Self;
   end
   else
     begin
       if (kenntNachfolger <> NIL) then
       begin
         kenntNachfolger.getroffen(pHPosition,pVPosition);
       end
       else result := NIL;
     end
end;
Aufrufen will ich es:
Code:
    aktiveFigur.deaktiviere;
      // checken, welches Quadrat getroffen wurde
      aktiveFigur := meineFiguren.getroffen(dieMaus.hPosition,dieMaus.vPosition);
      aktiveFigur.aktiviere;
Für Hilfe wäre ich sehr dankbar.
Gruss
Gunnar
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:03
Wie sind TFigur und TQuadrat definiert? Ist TQuadrat von TFigur abgeleitet?
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
pingun

Registriert seit: 22. Nov 2006
6 Beiträge
 
#3

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:08
Hallo,

TFigur ist die abstrakte Klasse. TQuadrat (und dann TKreis) sind davon abgeleitet. Methode getroffen wird in TQuadrat und TKreis überschrieben.

Gruss
Gunnar
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:09
Wie ist meineFiguren definiert?
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:11
OK, grundsätzlich müsste es also funktionieren. Allerdings kann man mit "funktioniert nicht" nicht sonderlich viel anfangen. Welche Fehlermeldung bekommst du denn genau?
Versuch mal, als Rückgabewert nicht TFigur, sondern TQuadrat anzugeben.
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
pingun

Registriert seit: 22. Nov 2006
6 Beiträge
 
#6

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:22
Hallo,

meineFiguren ist vom Typ TFigur;

Sorry Fehlermeldung bedeutet: das Objekt wird nicht zurückgeliefert. Er macht nicht. Er kommt in die Verzweigung, in der result:=self; steht. Das läuft. Aber wenn ich das zweite Quadrat anklicke, wird dieses kleine Quadrat (hatStift.zeichneRechteck(10,1) gezeichnet, aber das aktuelle Objekt kommt nicht zurück.
Im Hauptpgrogramm wird also aktiveFigur nicht gesetzt.

Zitat:
Versuch mal, als Rückgabewert nicht TFigur, sondern TQuadrat anzugeben.
Es ändert sich nichts. Er macht ja auch keine Fehler beim Compilieren, sondern er liefert bloss das aktuelle Qbjakt nicht zurück.


Hintergrund:
In meineFigure speichere ich eine verkettete Liste mit allen Figuren, die der Benutzer erstellt. Die Liste soll dann in getroffen durchgegangen werden, bis zum Ende. Beim Treffer soll das entsprechende Objekt sich selbst zurückliefern, so dass ich das aktive Objekt drauf zeigen lassen kann.

Frage ist: wie kann das Objekt, welches getroffen wurde und vom Type TFigur ist, sich zurückliefern (auch Typ TFigur)?

Gruss
Gunnar
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:26
Hallo Gunnar,

Delphi-Quellcode:
// kenntNachfolger.getroffen(pHPosition,pVPosition);
Result := kenntNachfolger.getroffen(pHPosition,pVPosition);
Funktioniert es so besser?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:32
Code:
function TQuadrat.getroffen (pHPosition: real; pVPosition: real) : TFigur;
begin
   if ((pHPosition > self.gibHPosition) AND (pHPosition < self.gibHPosition+zGroesse)
        AND (pVPosition > self.gibVPosition) AND (pVPosition < self.gibVPosition+zGroesse)) then
   // dies ist die Figur
   begin
     hatStift.zeichneRechteck(10,10);
     result := Self;
   end
   else
     begin
       if (kenntNachfolger <> NIL) then
       begin
         result := kenntNachfolger.getroffen(pHPosition,pVPosition); // <--------
       end
       else result := NIL;
     end
end;
Ich vermute, dass kenntNachfolger vom Typ TFigur ist, und die "getroffen"-Methode eines weiteren Objektes aufrufen soll, soweit hinterlegt. Du musst dabei dann natürlich auch das result "durchreichen", ähnlich wie bei einer Rekursion. Das Vorgehen ist auch so halb rekursiv - es wird ja immer die gleiche Methode aufgerufen, bis eine Abbruchbedingung (in dem Fall eine von zweien) erfüllt ist. Nur dass die Methoden jeweils zu unterschiedlichen Instanzen gehören, und lediglich Namen und Signatur teilen. (Sowas bastel ich auch immer gern in der Art )

\\edit: No red box, jamjam =)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
pingun

Registriert seit: 22. Nov 2006
6 Beiträge
 
#9

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 19:36
Hallo

Zitat:
Result := kenntNachfolger.getroffen(pHPosition,pVPosition);
Nein, damit funktioniert das auch nicht. Das würde auch bedeutet, dass er ja im nächsten Glied in der Kette das getroffen aufruft, und dass ruft dann das nächste auf. Was soll dann zurückgeliefert werden?

Das Objekt soll sich selber zurückliefern. Geht das einfach mit result:=self?


kenntNachfolger ist auch vom Type TFigur: richtig. Ich reiche das ja durch. Wenn die Trefferbedingung erfüllt ist, soll das Objekt sich dann zurückliefert. Rekursiv ist es so nicht, da es sich nicht selber aufruft, sondern durch eine Verkettung durchhangelt. Man könnte es - wie du sagst - halbrekursiv nennen.


Gruss
gunnar
  Mit Zitat antworten Zitat
pingun

Registriert seit: 22. Nov 2006
6 Beiträge
 
#10

Re: Objekt soll Referenz auf sich zurückliefern

  Alt 22. Nov 2006, 22:13
Hallo,
hat jemand noch eine Idee?

Ich habe weiter probiert - bisher nichts...

Ist die Logik denn richtig, dass Result:=self; eine Referenz auf das Objekt zurückgibt? Oder denke ich da falsch?

Viele Grüße und danke für die bisherige Hilfe.

Gunnar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz