AGB  ·  Datenschutz  ·  Impressum  







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

Public Arrays in Klassen

Ein Thema von sezer.yilmaz · begonnen am 28. Nov 2004 · letzter Beitrag vom 29. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2      
sezer.yilmaz

Registriert seit: 20. Nov 2004
11 Beiträge
 
#1

Public Arrays in Klassen

  Alt 28. Nov 2004, 13:26
Hallo! Ich habe mir eine Klasse geschrieben, die eine Wertetabelle mit X-Koordinaten und den dazugehörigen Y-Koordinaten darstellen soll. Dazu habe ich intern einfach ein Record mit X-Koordinate und Y-Koordinate deklariert und wollte anschließend ein Array dieses Records in den Public Bereich der Klasse schreiben,
weil ich später z.B. so darauf zugreifen können muss:

Code:
meinobjekt.Koordinaten[100].x_wert := "2"
meinobjekt.Koordinaten[100].y_wert := "4"
Das Problem ist nur, dass man Arrays nicht einfach public setzen kann. Wie kann ich trotzdem mein Ziel erreichen ?

Code:
unit UCoordinates;

interface

type RCoordinates = Record
xvalue   : Single;
yvalue   : Single;
end;

type
TCoordinates = class(TObject)
private
ACoordinates: Array of RCoordinates;
public
 constructor Create();
 destructor Destroy;
 ACoordinates: Array of RCoordinates;
end;

implementation

constructor TCoordinates.Create();
begin
inherited Create;
end;

destructor TCoordinates.Destroy;
begin
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 13:38
Nach dieser Art:

Delphi-Quellcode:
type
 TArray = array of RCoordinates ;

 TCoordinates = class(TObject)
 private
   FCoordinates : TArray ;
   function GetCoordinates (Index : integer) : RCoordinates ;
 public
   property ACoordinates [index : integer] : TArray read GetCoordinates ;
 end ;

...

function TCoordinates.GetCoordinates (Index : integer) : RCoordinates ;
begin
      Result := FCoordinates[index] ;
end ;
  Mit Zitat antworten Zitat
sezer.yilmaz

Registriert seit: 20. Nov 2004
11 Beiträge
 
#3

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 14:29
Vielen vielen Dank ! Bin immer wieder beeindruckt wie schnell man Antworten bekommt.
Ich kann jetzt in gewünschter Art auf die Elemente im Array zugreifen.
So hier z.B.:

Code:
showmessage(FloatToStr(MyCoordinates.Coordinates[0].y_value));
Das Problem ist jetzt nur, dass ich ja eigentlich auch drauf schreiben wollte in dieser Art:

Code:
MyCoordinates.Coordinates[0].y_value := 22;
Nach langem Probieren habe ich das irgendwie nicht hinbekommen
Hat da jemand ne Idee ? Ist bestimmt wieder total simpel.


Und hier für alle,die wissen wollen, wie der Schreibzugriff geklappt hat:

Delphi-Quellcode:
unit UCoordinates;

interface

type RCoordinates = Record
x_value : Single;
y_value : Single;
end;

type
TCoordinates = class(TObject)

private
ACoordinates : Array of RCoordinates;
function GetCoordinates (Index : integer) : RCoordinates ;


public
 constructor Create();
 destructor Destroy;
 property Coordinates [index : integer] : RCoordinates read GetCoordinates;
end;

implementation

constructor TCoordinates.Create();
begin
inherited Create;
SetLength(ACoordinates, 1);
ACoordinates[0].x_value := 0;
ACoordinates[0].y_value := 0;
end;

destructor TCoordinates.Destroy;
begin
end;

function TCoordinates.GetCoordinates (Index : integer) : RCoordinates ;
begin
      Result := ACoordinates[index] ;
end ;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 14:34
Von ausserhalb deiner Klasse wirst du nicht schreibend auf ACoordinates[i].y_value zugreifen können, da RCoordinates ein Record ist. Du wirst höchstens die Chance haben, ACordinates[i] komplett zu beschreiben.

Innerhalb der Klasse kannst du aber bequem über FCoordinates schreibend zugreifen.
  Mit Zitat antworten Zitat
sezer.yilmaz

Registriert seit: 20. Nov 2004
11 Beiträge
 
#5

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 14:40
Schade, das ist ziemlich ärgerlich, denn ich muss genau so zu greifen können,wie ich es beschrieben habe, weil der Lehrer das so vorgegeben hat. In der Schule haben wir das irgendwann mal ach so geschafft. Ich glaube wir hatten das Array irgendwie über ne Umleitung doch noch publizieren können. Wahrscheinlich war das irgendwie über einen Pointer darauf ?
Weiß vielleicht jemand was ich meine ?
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 14:43
Moin Sezer,

mach' mal aus Deinem Record eine Klasse

Delphi-Quellcode:
  RCoordinates = class(TObject)
  private
    Fx_value : Single;
    Fy_value : Single;
  public
    property x_value : single read Fx_Value write Fx_Value;
    property y_value : single read Fy_Value write Fy_Value;
  end;
Nicht zu vergessen dann davon auch immer eine Instanz zu erzeugen, bevor darauf zugegriffen werden kann.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
sezer.yilmaz

Registriert seit: 20. Nov 2004
11 Beiträge
 
#7

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 15:29
So da bin ich wieder! Ich hab jetzt das Record mit der Klasse ersetzt. Trotzdem kann ich nicht einfach das Array mit Instanzen dieser Klasse in den Public Bereich packen. Ich könnte jetzt auch wieder wie vorher mit nem Property Werte Lesen, aber nicht schreiben. Was hat das denn nun für einen Vorteil, wenn ich eine Klasse benutze ? Jetzt muss ich auch noch dynamisch Instanzen davon laden und das wäre dann das zweite Problem.
Vielleicht hab ich das auch ganz missverstanden ? Kannst du vielleicht den Code einfach mal ergänzen ?
Hab gerade ne Blockade

Delphi-Quellcode:
unit UCoordinates;

interface

type
//Unterklasse Zahlenpaar
TPair = class(TObject)
private
  Fx_value : Single;
  Fy_value : Single;
public
  constructor create();
  destructor destroy();
  property x_value : single read Fx_Value write Fx_Value;
  property y_value : single read Fy_Value write Fy_Value;
end;

//Klasse Tabelle mit Zahlenpaaren
TCoordinates = class(TObject)
private
  ACoordinates : Array of TPair;
public
  constructor Create();
  destructor Destroy;
  ACoordinates : Array of TPair; // Das geht leider nicht ! Field definition not allowed after methods or properties
end;

implementation

//Implementation für TPair
constructor TPair.Create();
begin
inherited Create;
end;

destructor TPair.Destroy;
begin
end;

//Implementation für TCoordinates
constructor TCoordinates.Create();
begin
inherited Create;
SetLength(ACoordinates, 1);
end;

destructor TCoordinates.Destroy;
begin
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 15:38
Zitat:
Delphi-Quellcode:
//Klasse Tabelle mit Zahlenpaaren
TCoordinates = class(TObject)
private
  ACoordinates : Array of TPair;
public
  constructor Create();
  destructor Destroy;
  ACoordinates : Array of TPair; // Das geht leider nicht ! Field definition not allowed after methods or properties
end;
Warum hast du denn nun wieder die alte TCoordinates Klasse
  Mit Zitat antworten Zitat
sezer.yilmaz

Registriert seit: 20. Nov 2004
11 Beiträge
 
#9

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 15:57
Sorry hab das grad weggelassen. Der Tip mit dem Property ist natürlich noch implementiert.
Aber wie gesagt bringt mir die Klasse auch nicht viel. Damit hätte ich halt das Record selber definiert aber mehr auch nicht (oder vielleicht doch ?). Jedenfalls habe ich immer noch keinen Schreibzugriff.

Delphi-Quellcode:
unit UCoordinates;

interface

type
//Unterklasse Zahlenpaar
TPair = class(TObject)
private
  Fx_value : Single;
  Fy_value : Single;
public
  constructor create();
  destructor destroy();
  property x_value : single read Fx_Value write Fx_Value;
  property y_value : single read Fy_Value write Fy_Value;
end;

//Klasse Tabelle mit Zahlenpaaren
TCoordinates = class(TObject)
private
  ACoordinates : Array of TPair;
  function GetCoordinates (Index : integer) : TPair ;
public
  constructor Create();
  destructor Destroy;
  property Coordinates [index : integer] : TPair read GetCoordinates;
end;

implementation

//Implementation für TPair
constructor TPair.Create();
begin
inherited Create;
end;

destructor TPair.Destroy;
begin
end;

//Implementation für TCoordinates
constructor TCoordinates.Create();
begin
inherited Create;
SetLength(ACoordinates, 1);
end;

destructor TCoordinates.Destroy;
begin
end;

function TCoordinates.GetCoordinates (Index : integer) : TPair ;
begin
  Result := ACoordinates[index] ;
end ;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Public Arrays in Klassen

  Alt 28. Nov 2004, 16:21
Zitat von sezer.yilmaz:
Delphi-Quellcode:
public
  property Coordinates [index : integer] : TPair read GetCoordinates;
Du greifst ja bis jetzt auch nur lesend auf die Eigenschaft zu... Das sollte dann schon so aussehen:
Delphi-Quellcode:
public
  property Coordinates [index : integer] : TPair read GetCoordinates write SetCoordinates ;
Ich rate dir dringend mal ein Tutorial über Klassen in Delphi durchzulesen, z.B. das hier von Luckie.
  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 01:27 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