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 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Konstruktor

  Alt 21. Mär 2012, 18:37
Ich frage mich ernsthaft, was der Konstruktor mit der Setter-Methode zu tun haben soll und wieso man dazu eine Instanz haben muss, damit der Compiler das akzeptiert. Ich glaube, wir reden alle an einander vorbei.
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
 
#12

AW: Konstruktor

  Alt 21. Mär 2012, 19:00
Ja , das muss ich ja machen.
Aber wo ?

Wenn ich das unter einen Button-ON-Click Event raufklatsche kann ich ja vorher keine Methoden benutzen
Felix
  Mit Zitat antworten Zitat
Peter1999

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

AW: Konstruktor

  Alt 21. Mär 2012, 19:27
Also nochmal!

Wenn du uns nicht verrätst, was du machen willst und du uns keinen Quelltext zeigst, dann können wir dir auch nicht helfen.
Wo verwendest du denn deine Instanzen der Klasse TDreieck?

Bisher schreibst du uns nur, frei übersetzt: "Ich muss ein Programm schreiben, was mache ich falsch"
Du verlangst hellseherische Fähigkeiten von uns. Wir würden ja alle gern helfen.
  Mit Zitat antworten Zitat
hotkey

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

AW: Konstruktor

  Alt 21. Mär 2012, 19:59
Okay , seht selbst bitte :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Button2: TButton;
    Button3: TButton;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label4: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;



  tgeo_objects = class
end;

   tpunkt = class(tgeo_objects)
   private
   x,y:integer; // HIER WIRD X UND Y DEKLARIERT AUF INTEGER NICHT RICHTIG OOP I KNOW
   end;

    TViereck = class(Tpunkt)

    public
      procedure setx;
      procedure sety;
      function getx:integer;
      function gety:integer;
    protected
     procedure zeichne;
   end;

  TDreieck = class(Tpunkt)
  protected
  procedure zeichnen;

  public
   procedure setx;
   procedure sety;
   function getx:integer;
   function gety:integer;
end;




TKreis = class (TDreieck)
procedure Kreiszeichnen;
private
x1,y1,x2,y2:integer;
public
procedure setx1;
procedure sety1;
procedure setx2;
procedure sety2;

function getx1:integer;
function gety1:integer;
function getx2:integer;
function gety2:integer;

end;

Tgeo_objectsArray = Array of Tgeo_objects;



var
  Form1: TForm1;
  lange,breite:integeR;
  myviereck : Tviereck;
  mydreieck : Tdreieck;
  mykreis : Tkreis;
 GeoArray :Tgeo_objectsarray;

implementation




 procedure addtoarray(Geoobject:tgeo_objects);
 begin
   SetLength(GeoArray, Length(GeoArray) + 1);
   GeoArray[High(GeoArray)] := GeoObject;
 end;

procedure tviereck.setx; //setzen
begin
 x:= strtoint(form1.Edit1.text);

end;

procedure Tviereck.sety; //setzen
begin
y:= strtoint(form1.edit2.Text);
end;

function Tviereck.getx;
begin

result :=x;

end;

function tviereck.gety;
begin
result:=y;
end;


procedure tdreieck.setx; //setzen
begin
 x:= strtoint(form1.Edit3.text);

end;

procedure Tdreieck.sety; //setzen
begin
y:= strtoint(form1.edit4.Text);
end;

function Tdreieck.getx;
begin

result :=x;

end;

function tdreieck.gety;
begin
result:=y;
end;


procedure Tkreis.setx1;
begin
x1 := strtoint(form1.Edit5.Text);
end;

procedure Tkreis.sety1;
begin
y1 := strtoint(form1.edit6.text);
end;

procedure Tkreis.setx2;
begin
x2 := strtoint(form1.edit7.text);
end;

procedure Tkreis.sety2;
begin
y2:= strtoint(form1.Edit8.text);
end;


function tkreis.getx1;
begin
result := x1;
end;

function tkreis.gety1;
begin
result := y1;
end;

function tkreis.getx2;
begin
result := x2;
end;

function tkreis.gety2;
begin
result := y2;
end;



procedure TViereck.zeichne;
begin
  form1.PaintBox1.Canvas.MoveTo(myviereck.getx,myviereck.gety);
  form1.paintbox1.canvas.LineTo(myviereck.getx+100,myviereck.gety);

  form1.paintbox1.canvas.lineto(myviereck.getx+100,myviereck.gety+100);

  form1.paintbox1.canvas.lineto(myviereck.getx,myviereck.gety+100);

  form1.paintbox1.Canvas.MoveTo(myviereck.getx,myviereck.gety);
  form1.PaintBox1.canvas.LineTo(myviereck.getx,myviereck.gety+100);
end;

 procedure Tdreieck.zeichnen;
begin
  form1.PaintBox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety);
  form1.PaintBox1.Canvas.LineTo(mydreieck.getx+100,mydreieck.gety);

  form1.PaintBox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety);
  form1.paintbox1.canvas.LineTo(mydreieck.getx,mydreieck.gety+100);

  form1.paintbox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety+100);
  form1.PaintBox1.Canvas.LineTo(mydreieck.getx+100,mydreieck.gety);
  end;

  procedure Tkreis.Kreiszeichnen;
  begin
  form1.PaintBox1.Canvas.Ellipse(x1,y1,x2,y2);
  end;


  procedure Farbe;
  begin
  if (form1.edit9.text) = ('rot')
   then
     begin
        form1.Color:=clred;
        end;
 end;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Myviereck := Tviereck.creatE;

   myviereck.setx;
   myviereck.sety;

   myviereck.zeichne;
   myviereck.free;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
   mydreieck := tdreieck.Create;

   mydreieck.setx;
   mydreieck.sety;

   mydreieck.zeichnen;
   mydreieck.Free;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    mykreis := tkreis.Create;

    mykreis.setx1;
    mykreis.sety1;
    mykreis.setx2;
    mykreis.sety2;

    mykreis.Kreiszeichnen;
    mykreis.Free;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 farbe;
end;

end.
Hab den Fehler irgendwie behoben , x und y wird nur einmal bei TPunkt deklariert und die anderen Klassen kriegen x und y auch und können diese manipulieren mit set und get.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Konstruktor

  Alt 21. Mär 2012, 20:24
Überleg mal was wohl private bedeutet und was public.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hotkey

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

AW: Konstruktor

  Alt 21. Mär 2012, 20:31
private ist doch dazu da , um Variablen etc abzukapseln , damit keiner Zugriff auf diese hat , damit keiner diese manipulieren kann.

Aber trotzdem müssen doch PRIVATE DEKLARIERTE VARIABLEN VERERBT WERDEN , oder nicht ?
Sieht man doch an meinem Quellcode.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#17

AW: Konstruktor

  Alt 21. Mär 2012, 21:50
Äaehmmm, irgendwie hat das ganz so gar nichts mit Objektorientierung zu tun ...

Designe Deine Klassen doch mal unabhängig von äußeren Einflüssen wie Form1, verpasse Ihnen eine Property Canvas oder übergebe diese beim Zeichenaufruf. Die Vererbung scheint mir auch etwas wild.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

AW: Konstruktor

  Alt 21. Mär 2012, 21:55
Äaehmmm, irgendwie hat das ganz so gar nichts mit Objektorientierung zu tun ...

Designe Deine Klassen doch mal unabhängig von äußeren Einflüssen wie Form1, verpasse Ihnen eine Property Canvas oder übergebe diese beim Zeichenaufruf. Die Vererbung scheint mir auch etwas wild.
Vergebene Liebesmüh ... das habe ich ihm schon n mal in m Threads gesagt.
So viel Beratungsresistenz bekommt man bis zur Klausur nicht mehr weg.

Ausserdem ist alles falsch was wir sagen, sieht man ja an seinem Quelltext.

Ich wünsche viel Glück bei der Klausur, vielleicht kommt ja nur "Singen und Klatschen" dran
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#19

AW: Konstruktor

  Alt 21. Mär 2012, 23:27
Äaehmmm, irgendwie hat das ganz so gar nichts mit Objektorientierung zu tun ...
Nicht nur das.
Wie schon gesagt wurde, ist die Qodeformatierung zwar grauenhaft, aber egal.

Schlimmer ist sowas.
Das hab ich vor 'ner Weile schonmal gesehn.
Selber Lehrer oder Dergleichen?
Zitat:
So viel Beratungsresistenz bekommt man bis zur Klausur nicht mehr weg.
Oder war das auch schon der Selbe.

Zitat:
Delphi-Quellcode:
procedure Tkreis.sety1;
begin
y1 := strtoint(form1.edit6.text);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    mykreis := tkreis.Create;

    mykreis.setx1;
    mykreis.sety1;
    mykreis.setx2;
    mykreis.sety2;

    mykreis.Kreiszeichnen;
    mykreis.Free;
end;
Wenn man sich das mal ansieht, dann bekommt man in Button3Click garnicht mit, was gemacht wird.
z.B. wo kommen die Werte für setx1 her?

Kein Resourcenschutzblock.

Das Zeichnen auf einen Form-Canvas ist nicht resistent/haltbar,
also ist das, was da gemacht wird, sinnlos und es müßte auch ins TForm.OnPaint nochmal mit rein.
Die Ganze ausgeführte Routine würde so auch ganz gut in eine prozedur ZeichneKreis(x1, y1, x2, y3: Integer; Canvas: TCanvas); oder prozedur ZeichneKreis(Rect: TRect; Canvas: TCanvas); passen. (was auch gut erkennbar macht, daß hier mit OOP eigentlich nicht viel los ist)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Mär 2012 um 23:31 Uhr)
  Mit Zitat antworten Zitat
Iwo Asnet

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

AW: Konstruktor

  Alt 22. Mär 2012, 06:04
Wie ich siehe, sind hier die meisten sehr gut in "destruktiver Kritik". Das bedeutet aber auch, das man das Problem nicht verstanden hat. Am OOP rumzumängeln (weiss er selbst, siehe Post #1) oder an der Codeformatierung, kommt dem Rauspicken von Rechtschreibfehlern gleich.

Das können die meisten der hier Anwesenden besser!

Zumindest bei C# ist es so, das private Felder und Methoden in geerbten Klassen nicht verfügbar sind. Will man das, muss man sie als protected deklarieren. Meiner Meinung nach warst Du mit der Suche nach einem Konstruktor auf dem Holzweg.

Aber nun ist ja die Klausur und es ist zu spät.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:23 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