AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Grundlegende Frage zum Thema OOP

Ein Thema von Mussi0 · begonnen am 13. Mai 2007 · letzter Beitrag vom 15. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 07:46
Zitat von Mussi0:
Delphi-Quellcode:
function TField.GetItem(Index : Integer) : TCell;
begin
  result := FCell.Items[Index];
end;

Mach ein Typecasting.


Delphi-Quellcode:
function TField.GetItem(Index : Integer) : TCell;
begin
  result := TCell(FCell.Items[Index]);
end;

Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 07:51
Vieleicht noch ein kleiner Schönheitstip.

Ich würde die Variable FCell umbenennen nach FCellList. FCell sugeriert eine Variable vom Type TCell. Es ist aber in Wirklichkeit eine Variable vom Typ TObjectList. Mann muss zwei mal schauen um den Code nicht misszuverstehen.


Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Mussi0

Registriert seit: 8. Jun 2006
55 Beiträge
 
#13

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 07:57
Hi,

danke danke ich werde den Code wenn ich daheim bin sofort ausprobieren!!

Aber kannst du mir vielleicht noch sagen was das bedeutet ein Typcasting?
Kann ich das so verstehen das ein Typcasting ähnlich einer Typumwandlung ist?

Und das mit der FCell das werde ich dann wohl noch ändern hab da nicht wirklich drüber nachgedacht!
Aber ist glaub ich sinnvoll das FCellList zu nennen.

Gruß

Muss!0
Wer die anderen neben sich klein macht ist nie groß.
von Johann Gottfried Seume

Website: http://mussio.funpic.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 09:52
Zitat von Mussi0:
Aber kannst du mir vielleicht noch sagen was das bedeutet ein Typcasting?
Kann ich das so verstehen das ein Typcasting ähnlich einer Typumwandlung ist?
So ist es.

TObjectList liefert als Ergebnis ein TObject zurück. Mit dem Typecastig gibst du an, daß es sich bei dem Ergebnis nicht um ein TObjcet handelt, sondern um ein TCell.

Aber Vorsicht. Das ist die einfache Typenumwandlung. Du must dir sicher sein, daß du der Objectlist nur Objekte vom Typ TCell zugefügt hast. Ansonsten musst du vorher eine Typenüberprüfung durchführen

Delphi-Quellcode:


function TField.GetItem(Index : Integer) : TCell;
begin
  if FCell.Items[Index] is TCell then
    result := TCell(FCell.Items[Index])
  else
    result:=nil; // Oder irgend eine Fehlermeldung
end;

Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Mussi0

Registriert seit: 8. Jun 2006
55 Beiträge
 
#15

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 12:52
Hi

Danke danke für deine Hilfe hat mir sehr geholfen.

Ist echt ein Tolles Forum hier mit viel Hilfe!!

Gruß

Muss!0
Wer die anderen neben sich klein macht ist nie groß.
von Johann Gottfried Seume

Website: http://mussio.funpic.de
  Mit Zitat antworten Zitat
Mussi0

Registriert seit: 8. Jun 2006
55 Beiträge
 
#16

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 21:47
Hallo,

ich weiß nicht ob ich für mein nächstes Problem einfach einen neuen Thread eröffnen soll
oder nicht da es eigentlich noch mit meinem vorherigen Problem zu tun hat.

Und zwar hat das mit den Klassen auch alles wunderbar funktioniert nur ich habe ein Problem mit
meinem Zugriff und zwar wenn ich jetzt ein neues Objekt in die ObjectList einfüge ist dieses jetzt auch
da drin nur wenn ich das innerhalb einer Schleife tue dann funktioniert das nicht bzw. er überschreibt mir
glaub ich immer wieder den Wert in der Speicheradresse und somit kommt es dann immer dazu das zum Schluss (also
nach der Schleife) in meiner ObjectList nichts drinsteht.

Hier mal der Code:

Delphi-Quellcode:
var objField : TField;
    arrBuchStaben : array [1..9] of string;
    i,j,k : integer;
    objCell : TCell;
begin
  writeln('Programm starten mit ENTER');
  readln;
  objField := TField.create;

  for i:=1 to 9 do begin
    arrBuchStaben[i] := chr(64+i);
    writeln('Buchstabe '+IntToStr(i)+': '+arrBuchStaben[i]);
  end;

  writeln;

  for i:=1 to 9 do begin
    //neues Objekt von Cell
    objCell := TCell.create;
    //objCell den Wert 0 geben
    objCell.CellWert.Wert := 0;
    //objCell den Key geben
    objCell.CellKey.Col := arrBuchStaben[j];
    objCell.Cellkey.Row := i;
    //ausgeben was nun drin steht
    writeln('Punkt '+IntToStr(i)+': ('+objCell.CellKey.Col+'/'+IntToStr(j)+') mit Wert: '+ IntToStr(objCell.CellWert.Wert));
    //der ObjectList hinzufügen
    objField.Add(objCell);
    //objCell zerstören
    objCell.Destroy;
  end;

  writeln;
  writeln('Programm beenden mit ENTER');
  readln;
end.
Wenn das stimmt was ich oben geschrieben habe das ist das natürlich schon mal toll das ich weiß woran es liegt nur
ich weiß nicht wie ich das beheben kann!!!

Gruß

Muss!0
Wer die anderen neben sich klein macht ist nie groß.
von Johann Gottfried Seume

Website: http://mussio.funpic.de
  Mit Zitat antworten Zitat
Mussi0

Registriert seit: 8. Jun 2006
55 Beiträge
 
#17

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 22:03
Hi,

hat sich schon erledigt hatte einen dummen Fehler dadrin hab eine Variable genutzt (j) in der nichts Stand und hab da versucht was mit zu machen.

Gruß

Muss!0
Wer die anderen neben sich klein macht ist nie groß.
von Johann Gottfried Seume

Website: http://mussio.funpic.de
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#18

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 22:04
Zitat von Mussi0:
Delphi-Quellcode:
    //der ObjectList hinzufügen
    objField.Add(objCell);
    //objCell zerstören
    objCell.Destroy;
Das Destroy darfst du hier nicht aufrufen. Du erzeugst das Objekt, Füllst es mit werten, fügst es der Objectlist zu und dann zerstörst du es.

Mit objField.Add(objCell); fügst du nur den Pointer/Zeiger des Objektes der Liste zu. es wird keine Kopie angelegt. Wenn du das Objekt aber zerstörst, dann zeigt der Pointer, den du übergeben hast in's leere.

Also solltest du den Destroy weglassen.

Damit du aber keinen Speicherleck bekommst, musst du dafür sorgen, daß die erzeugen Objekte zum "richtigen" Zeitpunkt freigiebst. Das kann dir aber auch die ObjectList abnehmen. Einfach OwnsObjects der Objectlist auf True setzen.



Gerd
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Mussi0

Registriert seit: 8. Jun 2006
55 Beiträge
 
#19

Re: Grundlegende Frage zum Thema OOP

  Alt 14. Mai 2007, 22:11
Hi,

Danke jetzt funktioniert es richtig da hab ich vorher nicht drüber
nachgedacht gehabt hatte mir gedacht "naja...ich erzeug das muss ich natürlich wenn ich es
in der form nicht mehr nutze löschen"
Hab aber nicht über diese Referenzübergabe nachgedacht!

Gruß

Muss!0

PS: Nochmals danke wenn ich mit meinem "ersten" selbstprogrammierten Delphi 7 Objektorientierten Programm
fertig bin werde ich es mal posten.
Wer die anderen neben sich klein macht ist nie groß.
von Johann Gottfried Seume

Website: http://mussio.funpic.de
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Grundlegende Frage zum Thema OOP

  Alt 15. Mai 2007, 06:24
Beim Lesen aus der ObjectList wirst du wahrscheinlich auch noch auf Fragen stossen. TOBjectList kann beliebige Objekte aufnehmen, also ab TObject. Ein objField[0] wird dir also ein TOBject liefern, und nicht etwa ein TCell. Das musst du selbst prüfen und casten:

Delphi-Quellcode:
if objField[0] is TCell then
   objCell := objField[0] as TCell ;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 03:47 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