AGB  ·  Datenschutz  ·  Impressum  







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

Verschiedene Klassen in Klasse

Ein Thema von fkerber · begonnen am 12. Jun 2005 · letzter Beitrag vom 12. Jun 2005
Antwort Antwort
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#1

Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 10:48
Hi!

Ich habe da mal eine Frage und hoffe, ihr könnt mir helfen.
Ich versuche mal den Sachverhalt so gut es geht darzustellen:

Ich haben ein Klasse TAuto, diese Klasse hat eine Property Fahrer. Jetzt geht es um den Typ dieser Property Fahrer. Momentan ist das eine Klasse TMensch. Allerdings ist diese Klasse für männlich und für weiblich. D.h. ist der Fahrer männlich hat die Klasse trotzdem Eigenschaften, die sie nicht braucht und umgekehrt.
Jetzt dachte ich mir, ich leite mir von TMensch 2 weitere Klassen ab: TMann und TFrau. Jetzt weiß ich aber nicht, wie ich die Property Fahrer setzen soll...
Ich kann sie ja nicht TMann, aber auch nicht TFrau machen.
Gehe ich hin und mache sie TMensch, meckert er, wenn ich eine TFrau zuweise (klar, TFrau hat ja Eigenschaften, die TMensch nicht kennt).

Wie kann man sowas lösen?

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 10:54
Hallo Frederic,

auf die Schnelle versucht:
Delphi-Quellcode:
type
   TMensch = class(TObject)
      public
         Foo: String;
   end;

   TMann = class(TMensch)
      public
         Bar: String;
   end;

   TFrau = class(TMensch)
      public
         Bar: Integer;
   end;
Anschliessend wird was damit gemacht:
Delphi-Quellcode:
var
   Mann, Frau: TMensch;
begin
   Mann := TMann.Create;
   Frau := TFrau.Create;
   try
      Mann.Foo := 'Mann';
      Frau.Foo := 'Frau';
      TMann(Mann).Bar := 'Bar';
      TFrau(Frau).Bar := 0;
   finally
      Mann.Free;
      Frau.Free;
   end;
end;
Ich kann dein Problem auch nicht nachvollziehen Laut OOP kannst du einer Objektvariable der Klasse TFoo auch ein Objekt der Klasse TBar zuweisen, solange TBar von TFoo abgeleitet wurde

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
12. Jun 2005, 10:55
Dieses Thema wurde von "alcaeus" von "Sonstige Fragen zu Delphi" nach "Object-Pascal / Delphi-Language" verschoben.
Ich schiebs mal nach in die Object Pascal-Sparte. Gehoert wohl eher dorthin.
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 11:07
Hi!

Ich versuchs mal an meinem Originalbeispiel zu erklären.
Ich habe ein Array mit 64 Feldern. Jedes Feld ist vom Typ TField (eigene Klasse). Jedes Feld hat eine Property TPeg (auch eigene Klasse). Jetzt gehe ich hin und leite TPeg ab (neue Klasse: TBauer). Diese hat als zusätzliche Var ein integer Foo.

Jetzt sieht mein Code so aus:

Delphi-Quellcode:
        newBauer:= TBauer.Create;
        newBauer.foo:=8;
        PlayField[i+j+k].peg:=newBauer;
        Showmessage(inttostr((PlayField[i+j+k].peg as TBauer).foo));
Dann sagt er mir:
Zitat:
---------------------------
Debugger Exception Notification
---------------------------
Project Schach.exe raised exception class EInvalidCast with message 'Invalid class typecast'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Außerdem habe ich das Problem bereits wissen zu müssen, dass es sich um einen Bauer handelt, da ich ja einen TypeCast machen muss. Ohne den sagt er mir natürlich, er kennt Foo nicht.

Ciao Frederi
Frederic Kerber
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 11:15
Wenn der Cursor nach der Meldung in der 'ShowMessage' Zeile steht, ist der Fehler vielleicht auch in der Zeile davor aufgetreten.
Wenn (Bla.peg as TBauer) illegal ist, dann ist eben peg nicht kompatibel zu TBauer. Dann machst Du was Anderes falsch...

Bei deinem Beispiel musst Du aber doch schon wissen, das der peg ein Bauer ist, sonst könntest Du doch seinen Foo nicht anzeigen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 11:46
Hi!

TBauer ist ja von TPeg abgeleitet.
Oder was meinst du?

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 14:48
Gut, wenn also
A. TBaurer = Class (TPeg) und
B. Board.Peg is TPeg dann muss
C. (Board.Peg as TBauer) gehen.

So einfach ist das.

Umkehrschluss: Aus NOT(C)-> not(b) oder not(a).

Wenn Delphi jetzt (scheinbar spinnt), dann ist das natürlich zum haareraufen. Aber hier liegt der Fehler mit Sicherheit bei Dir.
Was passiert, wenn Du nach dem
(PlayField[i+j+k].peg as TBauer). die Code-completion mit Ctrl+C aufrufst?
und was passiert bei
PlayField[i+j+k].peg. ???
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#8

Re: Verschiedene Klassen in Klasse

  Alt 12. Jun 2005, 15:49
Hi!

Zu a,b,c:
Ja, davon ging ich aus.

Nur, wo soll mein Fehler liegen?


(PlayField[i+j+k].peg as TBauer). hier zeigt er mir das benötigte foo an, meckert aber es wäre ein invalider TypeCast

im anderen Fall zeigt er mir das benötigte foo natürlich nicht an.


Ciao Frederic
Frederic Kerber
  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 23:28 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