AGB  ·  Datenschutz  ·  Impressum  







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

Konstruktor

Ein Thema von hotkey · begonnen am 21. Mär 2012 · letzter Beitrag vom 22. Mär 2012
Antwort Antwort
Seite 1 von 3  1 23      
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#1

Konstruktor

  Alt 21. Mär 2012, 18:17
Hallo , ich schreibe morgen eine Klausur und mir ist eingefallen , dass ich etwas nicht kann.

Wenn ich eine Klasse habe und zum Beispiel in dieser Klasse die Eigenschaften x,y :integer habe auf private und eine zweite Klasse erschaffe , die von der ersten diese Eigenschaften erben soll , kann ich keine Methoden aufrufen.

Also :

Delphi-Quellcode:
  tgeo_objects = class
end;

    TViereck = class(Tgeo_objects)
      private
     x,y:integer;
    public
      procedure setx;
      procedure sety;
      function getx:integer;
      function gety:integer;
  
   end;

  TDreieck = class(TViereck)
  private
   x,y:integer;
  
  public
   procedure setx;
   procedure sety;
   function getx:integer;
   function gety:integer;
Ich weiß , das ist nicht richtig OOP , ist aber auch nicht "wichtig" , in der Klausur wird auf was anderes mehr gesetzt.

Wenn ich jetzt zum Beispiel.

procedure tdreieck.setx schreibe , dann erkennt er das nicht.

Ich habe ja auch noch keine Instanz von Tdreieck erzeugt , aber wie und wo erzeuge ich das , um x und y in der Dreieck Klasse zu manipulieren.

Für Tviereck hatte ich eine Instanz erzeugt. Ist aber die Oberklasse und die Eigenschaften müssen nicht vererbt werden.

Wo also muss ich mydreieck := Tdreieck.create raufklatschen , damit er procedure tdreieck.setx zum Beispiel erkennt ?

Danke schon im Voraus.
Felix

Geändert von hotkey (21. Mär 2012 um 18:25 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Konstruktor

  Alt 21. Mär 2012, 18:27
Delphi-Quellcode:
tgeo_objects = class
end;

    TViereck = class(Tgeo_objects)
    private
      Fx,Fy:integer;
    public
      procedure setx( ax: Integer);
      procedure sety( ay: Integer);
      function getx:integer;
      function gety:integer;
    published
      property x: Integer read getx write setx;
      property y: Integer read gety write sety;
   end;

  TDreieck = class(TViereck)
  end;
...
  procedure TViereck.setx( ax: Integer);
  begin
      Fx = ax;
  end;
  ...
Markus Kinzler
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#3

AW: Konstruktor

  Alt 21. Mär 2012, 18:35
Das mit procedure Tviereck.setx funktioniert ja bei mir , aber sobald ich x,y von Viereck vererbe kann ich mit dem Punkt-Operator Tdreieck.setx diesen Befehl nicht ausführen , da er sagt , dass x nicht erkannt wird , obwohl es ja vererbt wird Tdreieck = class(tviereck) wie löse ich das blöde Problem ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

AW: Konstruktor

  Alt 21. Mär 2012, 19:01
Du weißt aber, was private, protected, virtual, override usw. bedeuten?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#5

AW: Konstruktor

  Alt 21. Mär 2012, 19:08
Bis jetzt hatten wir nur protected , private und public.

Spielt das eine Rolle für die Problemlösung , wenn ich fragen darf ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#6

AW: Konstruktor

  Alt 21. Mär 2012, 19:15
Ich denke schon, oder soll jede abgeleitete Klasse ihr eigenes SetX usw. haben? Wenn ja, wozu dann erben?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#7

AW: Konstruktor

  Alt 21. Mär 2012, 19:18
Naja , es muss doch möglich sein , wenn ich eine Klasse habe mit der Eigenschaft Bellen zum Beispiel , dass die zweite davon vererbte Klasse auch die Eigenschafte Bellen beeinhalten muss , oder ?
Felix
  Mit Zitat antworten Zitat
Peter1999

Registriert seit: 13. Dez 2007
Ort: Dresden
88 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Konstruktor

  Alt 21. Mär 2012, 19:23
Also zum Einen hat mkinzler natürlich recht, deine Setter-Methoden können nicht funktionieren, da sie keinen Wert zugewiesen bekommen. Was sollen sie dann an die Felder FX, FY weiterleiten? Schau dir also mal den Unterschied zu deinem Quelltext an. Oder handelt es sich um geerbte Methoden von TGeo_Objects, die du uns hier nicht zeigst?

Zum Zweiten wird dir hier niemand helfen können, wenn du uns nicht den Quelltext des Implementation-Teils deiner Unit zeigst. Wo versuchst du denn deine Methoden aufzurufen? Bzw. wo erzeugst du denn die Objekte von TDreieck, mit denen du auf die propertys (die dir noch fehlen) zugreifen willst?

Ja klar kannst du die Methoden vererben, dann solltest du dir aber mal die Begriffe virtual, dynamic und inherited anschauen.

Der Titel hier lautet "Konstruktor", wo ist bei dir ein Constructor???
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#9

AW: Konstruktor

  Alt 21. Mär 2012, 19:28
Ich weiß wo das Problem liegt , aber ich weiß nciht wie ich es beheben kann.

Ich muss doch erst von Dreieck eine INSTANZ mit dem KONSTRUKTOR-AUFRUF erstellen , damit ich z.B procedure tdreieck.setx benutzen kann.
Und dieses x ist in der Viereckklasse und Dreieck erbt von dieser Viereckklasse , also muss Dreieck automatisch auch die Variable x auf Integer haben ?
Felix
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#10

AW: Konstruktor

  Alt 21. Mär 2012, 19:33
Meinst Du sowas?

Delphi-Quellcode:
Var
  MeinDreieck : TDreiEck;

Begin
  MeinDreieck := TDreieck.Create; // Instantiiert
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 07:21 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