AGB  ·  Datenschutz  ·  Impressum  







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

Sub class <-> Parent class

Ein Thema von Skyrunner2 · begonnen am 1. Mär 2005 · letzter Beitrag vom 2. Mär 2005
Antwort Antwort
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#1

Sub class <-> Parent class

  Alt 1. Mär 2005, 16:40
hallo!
ich habe eine haupt klasse, und hab nun eine unter klasse erstellt

Type ChildClass=class(ParentClass)


wenn ich nun in einem form test vom typ ParentClass habe, und durch functionen Private Variablen in dieser klasse definiere, ist es dann möglich auf diese privaten variablen über die Child Class zu zugreifen? wenn ja, wie?


also noch mal anders:
Delphi-Quellcode:
Type Parent=Class
      Private
        PrivateVAR:Integer;
       Public
         Procedure ChangePrivateVar(NewValue:Integer);
       end;

       Child=Class(Parent)
        Public
          Function ReadParentPrivateVar():Integer;
         end;

//[...]

Var TestParent:Parent;
    TestChild:Child;

begin
//[... create...]
// dann:

TestParent.ChangePrivateVar(5);

TestChild.ReadParentPrivateVar;//-> Sollte 5 ausgeben...

Ich denke ich muss irgentwie TestChild mit Test Parent verknüpfen... doch wie, und ist das überhaupt möglich??
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Sub class <-> Parent class

  Alt 1. Mär 2005, 16:42
eine spontane idee wäre TestChild unter Parent -> Private unterzubringen... gut/schelcht? bzw geht das so wie ich will? - TestChild würde dann im haupt prog wegfallen..
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#3

Re: Sub class <-> Parent class

  Alt 1. Mär 2005, 16:52
Dafür ist soweit ich weiss der protected - Teil zuständig.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Sub class <-> Parent class

  Alt 1. Mär 2005, 16:57


*/ geht in Delphi help suchen /*

wsn dös?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Sub class <-> Parent class

  Alt 1. Mär 2005, 16:59
Moin!

Private Abschnitt definiert Methoden/Werte die nicht von aussen sichtbar sind und auch in Ableitungen nicht (Einschränkung: Friend-Funktionalität von Delphi bei Klassen in gleicher Unit). Für die Funktionalität wie in deiner Frage beschrieben, ist der Protected Abschnitt zuständig - von aussen nicht sichtbar, in den Ableitungen schon.

MfG
Muetze1
  Mit Zitat antworten Zitat
Skyrunner2

Registriert seit: 11. Jan 2005
Ort: Bochum
50 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Sub class <-> Parent class

  Alt 1. Mär 2005, 17:13
hmm aber die verknüpfung der eigentlichen variablen ist nocht nicht "vollständig"


wenn ich do jetzt auf TestChild.ReadParentPrivateVar zugreife, kann ich zwar PrivateVAR bzw ProtectedVAV "sehen" aber in diesem falle wäre diese variable doch nicht die selbe auf die TestParent.ChangePrivateVar(NewValue:Integer); zugreift, oder?

da ja TestParent, und TestChild zwar über den klassen typen zusammen hängen, aber nicht im sinne vom eigentlichen wert der variablen...


TestChild und TestParent ist doch quasi wie:


A:Record
Bla:Bla;
I:integer;end;
B: Integer;

wobei A und B Zwar von der klassen definition her irgentwie zusammen hängen, aber troz dem ist A.i nicht gleich B...


Problem ist also: Wie kann icht A & B, bzw TestParent und TestChild miteinander verknüpfen?
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Sub class <-> Parent class

  Alt 2. Mär 2005, 01:56
Moin!

Du hast 2 Variablen und legst damit wohl auch 2 Instanzen an. Daher verhält es sich doch so, das jede Instanz beim anlegen mit dem Constructor ihren eigenen Speicherplatz (und Variablenspeicherplatz) bekommt. Eine Klasse implementiert nur Verhalten und Code - der dann so oft benutzt werden kann wie benötigt - er kann so oft instanziiert werden wie nötig. Auch die Variablen: Die Klasse arbeitent mit ihnen in ihren Code - hat aber keinen Speicherplatz - dieser wird erst beim anlegen der Klasse zugewiesen und dann arbeitet der Code mit den dortigen Variablen. Instanziierst du die Klasse nochmals, dann arbeitet die 2. Instanz auch mit den gleichen Variablen - da es die gleiche Klasse = gleiche Variablen - ABER andere Position im Speicher und somit auch unabhängiger Inhalt.

Eine Klasse ist wie ein Stempel - sie bietet dir ein festes Muster. Wie oft und vor allem wo du jetzt die Klasse hineindrückst oder draufdrückst um das Muster zu erhalten ist deine Sache. Du kannst den "Stempel" am Strand an x-beliebigen Positionen stempeln und genausogut in Mutti's leckerer Griesssuppe...

Das Muster ist gleich - die Lage und die Ränder, Bezugspunkt, geographische Ausrichtung etc ist von jedem Muster anders.

Delphi-Quellcode:
Type
  TObjectParent = Class
  Protected
    a : Integer;

    Procedure SetzeAZurueck;

  Public
    Procedure SetzeA(Const NewA: Integer);
    Function AMal10: Integer;
  End;

  TObjectChild = Class(TObjectParent)
  Protected
    b : Integer;

    Procedure SetzeBeideZurueck;
  Public
    Procedure SetzeB(Const NewB: Integer);
    Function SummAB: Integer;
    Function Summ10A_10B: Integer;
  End;

....

Procedure TObjectParent.SetzeAZurueck;
Begin
  A := 0;
End;

Procedure TObjectParent.SetzeA(Const NewA: Integer);
Begin
  A := NewA;
End;

Function TObjectParent.AMal10: Integer;
Begin
  Result := A;
End;

  // Child

Procedure TObjectChild.SetzeBeideZurueck;
Begin
  SetzaAZurueck; // A und deren Methode hat diese Klasse geerbt
  B := 0;
End;

Procedure TObjectChild.SetzeB(Const NewB: Integer);
Begin
  B := NewB;
End;

Function TObjectChild.SummAB: Integer;
Begin
  Result := A + B;
End;

Function TObjectChild.Summ10A_10B: Integer;
Begin
  Result := AMal10 + B * 10;
End;
Ich hoffe das wird klarer bzw. trifft das Problem.

Ansonsten wenn du wirklich den Wert von A einer Instanz von TObjectParent haben willst, dann ist doch die Frage von welcher TObjectParent Instanz? Du kannst doch so viele Instanzen anlegen bis der Speicher überquillt - daher: den Wert der Variablen A von welcher Instanz sollte er denn nehmen/nutzen um ihn dir zurück zu geben?

MfG
Muetze1
  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 17:29 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