Przeładowanie operatorów a 'Result'

Przeładowanie operatorów a 'Result'
xdanio7x
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:9
0

Witam.
Czy podczas przeładowania operatora koniecznie jest używanie Result? W sensie czy błędem jest, jak go nie użyje i będzie to miało sens?
Np.

Kopiuj
// ....
type
  MojRekord = record
  var w : Integer;
  class operator Divide(c, d: MojRekord):MojRekord; 

//...
var x, y: MojRekord;
//...
class operator MojRekord.Divide(c,d: MojRekord):MojRekord;
  begin
  x.w:= d.w;
  y.w:= c.w;
  end;
//...

Czy jednak przeładowanie operatorów nie do tego służy?

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Wrocław
  • Postów:13042
1

Przeładowywanie operatorów nie służy do tego, co wynika z Twojego kodu - idealnie w ogóle nie powinieneś się tam odwoływać do zmiennych globalnych.
Dlaczego chciałbyś, aby wywołanie dzielenia dwóch rekordów zmieniało jakieś zmienne, a nie zwracało wynik?


_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
3
Kopiuj
  class operator MojRekord.Divide(c,d: MojRekord):MojRekord;
  begin
    Result.w:=c.w/d.w;
  end;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Tuchów
  • Postów:12171
3
xdanio7x napisał(a)

Czy jednak przeładowanie operatorów nie do tego służy?

Przeładowywanie operatorów w zamyśle ma służyć do objęcia kontroli nad podstawowymi operacjami (dodawanie, odejmowanie itd.) dla typów danych, które nie posiadają ich zdefiniowanych; Po drugie, podpięcie się pod dany operator ma umożliwić zwrócenie danych tego samego typu, a nie modyfikację czegokolwiek znajdującego się w argumentach;

Twój kod @xdanio7x jest błędny, bo przeładowujesz operator wbrew jego przeznaczeniu; Dlatego też odpowiedź na to pytanie:

Czy podczas przeładowania operatora koniecznie jest używanie Result?

brzmi - tak.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Azarien
"operator wbrew przeznaczeniu" to jeszcze nie błąd :)
flowCRANE
Napisałem, że kod jest błędny - no i jest, bo nie ustawia rezultatu; Oczywiście można zrobić coś dodatkowo, jednak zwrócenie wartości to priorytet ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.