![]() |
AW: Konstruktor
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.
|
AW: Konstruktor
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 :( |
AW: Konstruktor
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. |
AW: Konstruktor
Okay , seht selbst bitte :
Delphi-Quellcode:
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.
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. |
AW: Konstruktor
Überleg mal was wohl private bedeutet und was public.
|
AW: Konstruktor
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. |
AW: Konstruktor
Ä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. |
AW: Konstruktor
Zitat:
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 :mrgreen: |
AW: Konstruktor
Zitat:
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:
Zitat:
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
Delphi-Quellcode:
oder
prozedur ZeichneKreis(x1, y1, x2, y3: Integer; Canvas: TCanvas);
Delphi-Quellcode:
passen. (was auch gut erkennbar macht, daß hier mit OOP eigentlich nicht viel los ist)
prozedur ZeichneKreis(Rect: TRect; Canvas: TCanvas);
|
AW: Konstruktor
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz