Autor Beitrag
thebe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Fr 04.07.03 14:02 
Moin,

Ich hab ma zwei Fragen die ich in meiner Delphi-Zeit noch nit wirklich beantworten konnte, vielleicht könnt ihr mir dabei helfen.

Und zwar...

1.) Kann man bei Delphi wie bei C++ "Operatoren Scoping" (so heißt das glaub ich) machen, sprich daß man neue Objecte/Klassen definiert und dann neue Operatoren die auf die Klassen angewendet werden können. Wäre z.b. recht gut für Rechnungen mit Vektoren, da man die ganzen Rechnungen da dann ganz schnell per Operatoren wie * und x machen kann.

2.) Wie kann man bei einer Prozedur einstellen, daß man z.b. nur einen Buffer braucht wo reingeschrieben wird (wie z.b. bei den Streams Read/Write, denen isses egal ob man in nen Integer oder aber sonst wo hinschreibt). Oder aber das man z.b. einige Parameter alternativ gestaltet. Wäre ja recht nett für Prozeduren wo man z.b. ne TStatusBar übergeben kann, die den Fortschritt anzeigt aber nicht unbedingt muss.

Scho ma vielen Dank für evtl. Hilfe

- Thebe
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 04.07.03 14:48 
Zitat:
...Oder aber das man z.b. einige Parameter alternativ gestaltet. Wäre ja recht nett für Prozeduren wo man z.b. ne TStatusBar übergeben kann, die den Fortschritt anzeigt aber nicht unbedingt muss.


ja...so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure setCrap(para1:byte = 128 );
begin
  ...
end;


dieser parameter muss dann nicht angegeben werden und benutz dann zB. 128!

_________________
mfg.
mâximôv
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Fr 04.07.03 15:18 
hi,

Bei 1.) weiss ich leider nicht was du meinst.
Deswegen kann ich dir nur zu 2.) etwas sagen.

Also du fragst da ja nach mehreren Sachen gleichzeitig ;) .

1. Wie kann ich der Prozedur einen Parameter übergeben, bei dem es egal ist was es für ein Datentyp ist?

A:
ausblenden Delphi-Quelltext
1:
 procedure testproc( Variable1 : Variant);					


Dadurch kannst du alles übergebne wozu du lustig bist. Es kann jedoch zu Fehlern in der Prozedure kommen, wenn etwas nicht korrekt umgewandelt werden kann.


2. Wie kann ich der Prozedure sagen, dass sie Standartwerte benutzt und man die Parameter deswegen nicht unbedingt angeben muss.

A:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
 procedure TForm1.testproc( StatBar1 : TStatusBar = nil);
 begin
   if StatBar <> nil then begin
     //Quelltext mit Statusbar.
   end else begin
     //Quelltext ohne Statusbar.
   end;
 end;


Du kannst nun eine Statusbar übergeben. Wenn nicht, so wird einfach der Wert benutz der hinter dem "=" steht. Dort könnte natürlich auch eine andere Standart-Statusbar deines Progs stehen die die Prozedur verwenden soll, wenn keine andere übergeben worden ist.

Wenn du mehrere Parameter mit Defaultwerten angibst, so musst du von Links nach rechts alle Werte übergeben bis zu dem Wert den du abändern willst. z.B. du hast 5 Paramter in einer Prozedur mit Defaultwerten versehen. Und nun möchtest du bei einem Aufruf den 3 Parameter abändern, so musst du im Prozeduraufruf Parameter 1-3 übergeben.




3. Wie kann man eine Prozedure mit einem Parameter definieren, wobei dieser Parameter jedoch aus mehreren verschiedenen Variablentypen bestehen kann.

A:
ausblenden Delphi-Quelltext
1:
2:
  procedure tester( var1 : integer); override;
  procedure tester( var1 : string); override;


Du hast nun zwei Prozeduren, die du mit dem selben aufruf ansteuern kannst. Der Compiler unterscheidet an Hand der Variablentypen welche
Prozedur du benutzen möchtest.

Dadurch muss natürlch die Parameter eindeutig am Variablentyp zu unterscheiden sein.

Und du must die selbe Prozedur auch jeweils einmal schreiben für die jeweils verschiedenen Variablentypen.



Ich hoffe dir beantwortet das ein paar Fragen.

_________________
Result := 42; Application.ProcessMessages;
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 04.07.03 16:32 
BeniSchindler hat folgendes geschrieben:
...3. Wie kann man eine Prozedure mit einem Parameter definieren, wobei dieser Parameter jedoch aus mehreren verschiedenen Variablentypen bestehen kann.

A:
ausblenden Delphi-Quelltext
1:
2:
  procedure tester( var1 : integer); override;
  procedure tester( var1 : string); override;

....


Das ist so nicht richtig :wink: (wohl n schreib fehler) :

ausblenden Delphi-Quelltext
1:
2:
  procedure tester( var1 : integer); overload;
  procedure tester( var1 : string); overload;


PS: warum wird overload nicht fett gemahlt?

_________________
mfg.
mâximôv
BeniSchindler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 82

Win 2k / suse9.1
D7 Prof / Kylix 3
BeitragVerfasst: Fr 04.07.03 17:41 
Oups, ... sorry ... natürlich gehört da "overload" hin. :!:
Hab in den letzen Tagen einfach nichts anderes gemacht, als vererbte Prozeduren zu überschreiben :roll:. Hab deswegen gerade einen kleinen "Override"-Tick ;)

_________________
Result := 42; Application.ProcessMessages;
thebe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128

WinXP Home
D6 Enterprise
BeitragVerfasst: Fr 04.07.03 18:09 
Aaaah wunderbar Danke, nu habsch das kapiert

Naja zu 2.)

Operation Scoping:

Man erstellt ne neue Klasse und gibt vor das man diese Klasse per neuem Operator und ner anderen Klasse / Wert verknüpfen kann.

z.B. VektorKlasse * irgendeinFloatWert = VektorKlasse(verlängert)

dieser Operator kann dann auch meinetwegen x oder + oder weiß der Geier was sein. Ist nicht wirklich wichtig, aber meines Erachtens nach ungeheuer übersichtlicher als wenn man "VerlängereVektor(VektorKlasse, irgendeinFloatWert);" benutzt im Code.

Nochmals vielen Dank wg. der Overload Geschichte :)

- Thebe
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 04.07.03 20:52 
Das fehlende "Operation Scoping" ist leider ein kleines manko von delphi :cry:

_________________
mfg.
mâximôv
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 04.07.03 23:27 
Heißt das nicht "Überladen von Operator" ? Und das ist mit Variants zum Teil machbar.

_________________
Ist Zeit wirklich Geld?
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 04.07.03 23:34 
Operatoren auf Klassen anzuwenden is da aber ne ganz andere liga :shock:

_________________
mfg.
mâximôv