AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Newbie sucht Hilfe - constructor vererben ?!
Thema durchsuchen
Ansicht
Themen-Optionen

Newbie sucht Hilfe - constructor vererben ?!

Ein Thema von galaxy2k · begonnen am 7. Jun 2003 · letzter Beitrag vom 16. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
galaxy2k

Registriert seit: 7. Jun 2003
7 Beiträge
 
Delphi 7 Professional
 
#1

Newbie sucht Hilfe - constructor vererben ?!

  Alt 7. Jun 2003, 20:15
Vorab , ich bin in der Oberstufe und noch ein relativer lamer in Delphi . Wir arbeiten gerade mit der Klasse mSum und Delphi 7.0 , um uns zu orientieren.

Zu meinem Problem :

Wir sollen ein Planetensystem programmieren. Im Prinzip kein Problem mit einer Kennt-Bezeihung zu realisieren . Jetzt kommt das große ABER

Wir haben eine Klasse namens mFigur . Dort wird der constructor defeniert und die Prozedur zeichne , loesche als privat ,sowie die Prozedur bewege als virtual/abstract deklariet .
Nun habe ich eine Klasse mSonne und eine mPlanet . mSonne ist einfach nur leer im Implementationteil und eine Klasse von mFigur .mPlanet dagegen soll mSonne kennen und ist eine Klasse von mFigur .

Mein Problem besteht jetzt darin , dass der constructor Teil von mFigur übernommen wird ,aber noch zusätzliche Parameter hinzugefügt werden in mPlanet . mPlanet muss ja mSonne kennen . Wie kann ich jetzt den alten constructor vererben ? Ich weiß wie das bei Prozeduren geht , mit Hilfe von inherited procedure_name , aber mir fehlt leider das KnowHow zur Zeit .



mfg R.K.


p.s. leider ist unser Lehrer nicht der beste in erklären
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2
  Alt 7. Jun 2003, 20:25
Ich hoffe ich hab dich richtig verstanden...

Du kannst den geerbten Constructor auch einfach mit inherited [constructor] aufrufen (genauso wie bei andren prozeduren)...
Manuel Pöter
  Mit Zitat antworten Zitat
galaxy2k

Registriert seit: 7. Jun 2003
7 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 7. Jun 2003, 20:34
Kann sein , dass ich doch was vergessen hab . Also , das alles soll sich im Interface abspielen und anschließend im Implementation-Teil von mPlanet für nähere Anweißungen.

Hier die Source-Beispiel:

mFigur
Delphi-Quellcode:
unit mFigur;

interface
uses mSum;
  type TFigur = class

  hatpen : buntstift;
  zXPos,zYpos,zGeschw,zRadius : Zahl;
  zFarbe : GanzeZahl;

[B] constructor init(pXpos,pYpos,pRadius,pGeschw:Zahl;pFarbe : GanzeZahl);virtual;[/B]

  procedure zeichne;
  procedure bewege;virtual;abstract;
  procedure loesche;

  destructor gibfrei;
end;
mPlanet
Delphi-Quellcode:
unit mPlanet;

interface
 uses mSum,mFigur,mSonne;
 type
  TPlanet = class(TFigur)

  hatpen : buntstift;
  Sonne : TSonne;
  zAbstand : Zahl;

  [B]constructor init(pSonne : TSonne; pAbstand : Zahl) ;override;[/B]
  procedure bewege;override;

  end;
Jetzt sollen natürlich die Parameter von mFigur vererbt werden ,damit ich mSonne in mPlanet benutzen kann und die Kennt-Beziehung vorhanden ist .


mfg R.K.


p.S. natürlich ist der Code in mPlanet falsch und so nicht complierbar

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#4
  Alt 7. Jun 2003, 20:43
Eine Methode kann nur überschrieben werden, wenn die neu implementierte Methode dieselben Parameter aufnimmt. Um in einer abgeleiteten Klasse eine Methode mit einem Namen einführen zu können, der in der Basis-Klasse schon einmal existiert braucht man "reintroduce".
Manuel Pöter
  Mit Zitat antworten Zitat
JoelH
(Gast)

n/a Beiträge
 
#5

hmm,

  Alt 8. Jun 2003, 08:33
mal was leicht OffTopic, aber ich hab dazu ne Frage, kann man Constructoren vererben ? In C++ geht dass ja nicht. Wie auch immer, also ich mach es immer so dass ich den COnstructor überlade, also nicht über schreibe mit Override, sondern mit Overload überlade und dann mit inherited create(AOwner) den StandardKonstruktor der Klasse mit in meinen einbinde.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#6
  Alt 8. Jun 2003, 10:57
Schaut euch vielleicht mal meine Ausarbeitung über OOP in Delphi an: www.x-spy.net/personal
Manuel Pöter
  Mit Zitat antworten Zitat
galaxy2k

Registriert seit: 7. Jun 2003
7 Beiträge
 
Delphi 7 Professional
 
#7
  Alt 8. Jun 2003, 14:33
So wie JoelH geschrieben hat , meinte ich das . Denn mPlanet braucht den constructor von mFigur und zusätzliche Parameter (kenntSonne).



Mal sehen , ich werde es mal versuchen .


thx g2k
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 8. Jun 2003, 16:55
Moin g2k,

da Du eine Pro Version hast, sind ja auch die Sourcen dabei.
Schau Dir da doch mal an, wie Borland das bei TThread gemacht hat.
Diese Kompo lebt praktisch davon, dass Du bei davon abgeleiteten Klassen einen anders strukturierten Constructor verwendest, als den der Basisklasse.
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
galaxy2k

Registriert seit: 7. Jun 2003
7 Beiträge
 
Delphi 7 Professional
 
#9
  Alt 14. Jun 2003, 12:23
Danke für eure Hilfe . Hab es endlich geschafft . Mein Denkfehler war noch , dass der Init Teil im Implementation´bereich neu geschrieben werden muss usw. Seitdem luppt es wunderbar und ich hab wieder was dazugelernt .

Und nochmals danke für den Befehl overload .


mfg g2k
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10
  Alt 14. Jun 2003, 15:28
Hallo galaxy2k,
Deine Klasse TFigur wird implizit von TObject abgeleitet. Dadurch hat sie schon einen constructor und einen destructor geerbt. Dadurch, dass Du Deinen constructor Init nennst, erhält Deine Klasse TFigur einen zweiten constructor (Klassen können beliebig viele constructoren haben). Wenn Du innerhalb der des constructors Init nicht inherited Create aufrufst begehst Du einen schweren Fehler. Das geleiche gilt für Deinen destructor gibfrei. Damit hast Du dann die "VirtualChain" unterbrochen und Deine Objekte werden nicht richtig erstellt bzw. abgeräumt.
  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 17:53 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