AGB  ·  Datenschutz  ·  Impressum  







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

Array mit unterschiedlichen Datentypen

Ein Thema von holle · begonnen am 3. Nov 2006 · letzter Beitrag vom 4. Nov 2006
Antwort Antwort
holle

Registriert seit: 15. Nov 2005
Ort: Uckerland
138 Beiträge
 
Delphi 7 Enterprise
 
#1

Array mit unterschiedlichen Datentypen

  Alt 3. Nov 2006, 10:55
Hallo, wie kann ich das vereinfachen?

Delphi-Quellcode:
Haus1 := THausA.Create(...);
Haus2 := THausB.Create(...);
Haus3 := THausC.Create(...);
Haus4 := THausD.Create(...);
...

Haus1.Zeichnen;
Haus2.Zeichnen;
Haus3.Zeichnen;
Haus4.Zeichnen;
...

Haus1.TuerAuf;
Haus2.TuerAuf;
Haus3.TuerAuf;
Haus4.TuerAuf;
...

Haus1.TuerZu;
Haus2.TuerZu;
Haus3.TuerZu;
Haus4.TuerZu;
...
Ich würde gerne alle Häuser in ein Array packen und dann über Haus[i].Zeichen; ansprechen. Das funktioniert so allerdings nicht, da Haus1, Haus2, Haus3, ... von verschiedenen Datentypen sind. Weiß jemand, wie ich das hinbekomme?

- Marcel -
Marcel
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Array mit unterschiedlichen Datentypen

  Alt 3. Nov 2006, 11:03
Wenn alle Klassen von einer gemeinsamen Basisklasse abgeleitet wurden,
und diese Basisklasse virtuelle Methoden hat ist das kein Problem.
siehe: (ab Vererbung folgende)
http://www.dsdt.info/grundlagen/sprache/
Andreas
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Array mit unterschiedlichen Datentypen

  Alt 3. Nov 2006, 22:21
Was ist denn der Unterschied zwischen den 4 Häuser-Klassen? Wahrscheinlich reicht dafür doch auch eine Klasse.
  Mit Zitat antworten Zitat
Jibiel

Registriert seit: 9. Jul 2006
15 Beiträge
 
#4

Re: Array mit unterschiedlichen Datentypen

  Alt 4. Nov 2006, 11:07
@Cöster ich nehme an, die Häuser haben verschiedene Größenverhältnisse etc., das kommt bei dem Projekt nämlich vor *das gleiche Informatikbuch hat*
:>
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Array mit unterschiedlichen Datentypen

  Alt 4. Nov 2006, 11:14
Zitat von Jibiel:
@Cöster ich nehme an, die Häuser haben verschiedene Größenverhältnisse etc., das kommt bei dem Projekt nämlich vor *das gleiche Informatikbuch hat*
Man könnte dies aber trotzdem in einer Klasse abbilden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Array mit unterschiedlichen Datentypen

  Alt 4. Nov 2006, 12:28
Zitat von shmia:
Wenn alle Klassen von einer gemeinsamen Basisklasse abgeleitet wurden,
und diese Basisklasse virtuelle Methoden hat ist das kein Problem.
Ausser eventuell bei
Delphi-Quellcode:
Haus1 := THausA.Create(...);
Haus2 := THausB.Create(...);
Haus3 := THausC.Create(...);
Haus4 := THausD.Create(...);
Da wirds wohl nicht ohne weiteren Aufwand kürzer gehen.... Aber für den Rest ist die Erzeugung einer Basisklasse der richtige Weg:

Delphi-Quellcode:
THaus = class(TObject)
protected
   procedure Zeichnen ; virtual ; abstract ;
   procedure TuerAuf ; virtual ; abstract ;
   procedure TuerZu ; virtual ; abstract ;
end ;

THausA = class(THaus)
public
   procedure Zeichnen ; override ;
   procedure TuerAuf ; override ;
   procedure TuerZu ; override ;
end ;
 // THausB usw. analog

implementation
 
procedure THausA.Zeichnen ;
begin
    inherited Zeichnen ;
    // Deine Zeichenroutine für Haus A
end ;

// usw.
Die Häuser würd ich dann nicht in einem Array sondern TObjectList ablegen. Dann sieht dein obiger Code verkürzt so aus:

Delphi-Quellcode:
procedure AlleZeichnen ;
var
  Haeuser : TObjectList;
begin
    HausA := THausA.Create ;
    HausB := THausB.Create ;
    HausC := THausC.Create ;
    HausD := THausD.Create ;

    Haeuser := TObjectList.Create ;
    Haeuser.Add (HausA) ;
    Haeuser.Add (HausB) ;
    Haeuser.Add (HausC) ;
    Haeuser.Add (HausD) ;
    for i := 0 to Haeuser.count-1 do begin
       (Haeuser[i] as THaus).Zeichnen ;
       (Haeuser[i] as THaus).TuerAuf;
       (Haeuser[i] as THaus).TuerZu;
    end ;
end ;
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Array mit unterschiedlichen Datentypen

  Alt 4. Nov 2006, 13:46
Zitat von Jibiel:
@Cöster ich nehme an, die Häuser haben verschiedene Größenverhältnisse etc., das kommt bei dem Projekt nämlich vor *das gleiche Informatikbuch hat*
Aber wozu wurden denn Attribute erfunden? Wenn die Häuser sich z.B. darin unterscheiden, dass die Türen unterschiedlich breit sind, übergibt man die Größe doch im constructor als Parameter und speichert das dann unter den Attributen.
Bei Zeichnen der Tür schreibt man dann nicht Rectangle(20, 20, 30, 40); sondern Rectangle(FDoor.X, FDoor.Y, FDoor.X + FDoor.Width, FDoor.Y + FDoor.Height); Dadurch spart man jede Menge Schreibarbeit und es ist später leichter, Änderungen vorzunehmen, wie z.B. ein fünftes Haus oder, wenn ein Haus auf einmal breiter ist, muss man nur den Create-Aufruf ändern und nicht an den Zeichenroutinen rumpfuschen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:43 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