AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

OOP: Vererbung von Konstruktoren

Ein Thema von Nonsense · begonnen am 11. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
Seite 1 von 3  1 23   
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 00:45
Hi,

mal eine kleine Frage zu Konstruktoren.
Ich habe eine Basisklasse:
Delphi-Quellcode:
  TBase = class(TObject)
  private
    FX : Integer;
    FY : Integer;
    constructor Create(X, Y: Integer);
  public
    property X: Integer read FX;
    property Y: Integer read FY;
  end;
(Der Konstruktor ist private, da die Klasse nur für Ableitungen ist und keine Instanz gebildet werden soll.)

Meine Frage ist jetzt:
Wenn ich weitere Klassen von TBase ableiten will, wie muss ich deren Konstruktoren gestalten?
Delphi-Quellcode:
  TSecond = class(TBase)
  private
  public
    constructor Create(X, Y: Integer);
  end;

  constructor TSecond.Create(X, Y: Integer);
  begin
    inherited Create(X, Y: Integer):
  end;
Oder wie muss ich mir das vorstellen? Wenn ich keinen eigenen Konstruktor definiere, wird dann der von TBase genommen?

Ihr könnt mir sicher helfen (davon bin ich überzeugt...)

Danke im Voraus.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:00
Ja du solltest ihn auf alle Fälle aufrufen. Und auch in TBase solltest du Delphi-Referenz durchsucheninherited aufrufen, damit der Konstruktor von TObject aufgerufen wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#3

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:03
Zitat von Luckie:
Ja du solltest ihn auf alle Fälle aufrufen.
D.h. es gibt primär keine "bessere" Lösung, als meine aufgezeigte?

Zitat:
Und auch in TBase solltest du Delphi-Referenz durchsucheninherited aufrufen, damit der Konstruktor von TObject aufgerufen wird.
Ist ja logisch, hab ich jetzt nur wegrationalisiert (was für ein hässliches Wort).

Hier stand absoluter Blödsinn. Ich sollte schlafen gehen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:11
Wie so besser? Das ist nun mal so. da gibt es kein besser oder schlechter. Wenn ich mit dem Auto fahren will, dann müssen sich die Räder auch drehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#5

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:15
Zitat von Luckie:
Wie so besser? Das ist nun mal so. da gibt es kein besser oder schlechter. Wenn ich mit dem Auto fahren will, dann müssen sich die Räder auch drehen.
Was für ein Vergleich. Aber Du hast schon recht, meine Formulierung war nur etwas unglücklich.

Edit: Danke. Frage beantwortet.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:19
Sollte der Constructor in TBase nicht Delphi-Referenz durchsuchenprotected sein?
Delphi-Referenz durchsuchenPrivate Felder/Methoden sind doch für abgeleitete Klassen nicht sichtbar. IMHO würde das Delphi-Referenz durchsucheninherited deshalb nicht den Constructor aus TBase sondern von TObject nehmen.
Ich bin mir da aber nicht so sicher. (arbeite nur sporadisch mit Delphi)
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#7

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:21
Zitat von Robert_G:
Sollte der Constructor in TBase nicht Delphi-Referenz durchsuchenprotected sein?
Delphi-Referenz durchsuchenPrivate Felder/Methoden sind doch für abgeleitete Klassen nicht sichtbar. IMHO würde das Delphi-Referenz durchsucheninherited deshalb nicht den Constructor aus TBase sondern von TObject nehmen.
Ich bin mir da aber nicht so sicher. (arbeite nur sporadisch mit Delphi)
Hui, da muss ich mal kurz nachlesen.
Edit: Ja, Du hast recht. Danke.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#8

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:27
Du kannst aber mit protected ins nächste offene Messer laufen...
Die (etwas schlampige) Implementierung von protected in Delphi ähnelt ein wenig dem internal aus c#.
Alle protected Felder/Methoden sind für alle Klassen innerhalb der Unit sichtbar!
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#9

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:31
Zitat von Robert_G:
Du kannst aber mit protected ins nächste offene Messer laufen...
Die (etwas schlampige) Implementierung von protected in Delphi ähnelt ein wenig dem internal aus c#.
Alle protected Felder/Methoden sind für alle Klassen innerhalb der Unit sichtbar!
Da fällt mir doch glatt noch eine Frage ein:
Warum kann ich die Privaten Felder einer Klasse (z.B. FBitmap: TBitmap) bei der Code-Vervollständigung sehen obwohl es entsprechende property-Elemente gibt?

D.h. wenn ich auf MeineKlasse.Bitmap zugreifen will, zeigt er mir auch FBitmap an, obwohl als private deklariert.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: OOP: Vererbung von Konstruktoren

  Alt 11. Okt 2004, 01:34
Befindest du dich in der gleichen Unit? Innerhalb der gleichen Unit sind auch private Felder einer Klasse für andere sichtbar.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:09 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