Delphi documentation कहना है कि यह इंक और दिसं ऑपरेटरों ओवरलोड संभव है; मुझे ऐसा करने का कोई वैध तरीका नहीं दिखता है। इंक ऑपरेटर को अधिभारित करने के प्रयास यहां दिए गए हैं; कुछ प्रयास त्रुटियों को संकलित करने के लिए नेतृत्व, कुछ पहुँच उल्लंघन (डेल्फी XE) क्रम के लिए:कैसे डेल्फी में इंक (डीईसी) ऑपरेटरों ओवरलोड?
program OverloadInc;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyInt = record
FValue: Integer;
// class operator Inc(var A: TMyInt); DCC error E2023
class operator Inc(var A: TMyInt): TMyInt;
property Value: Integer read FValue write FValue;
end;
class operator TMyInt.Inc(var A: TMyInt): TMyInt;
begin
Inc(A.FValue);
Result:= A;
end;
type
TMyInt2 = record
FValue: Integer;
class operator Inc(A: TMyInt2): TMyInt2;
property Value: Integer read FValue write FValue;
end;
class operator TMyInt2.Inc(A: TMyInt2): TMyInt2;
begin
Result.FValue:= A.FValue + 1;
end;
procedure Test;
var
A: TMyInt;
begin
A.FValue:= 0;
Inc(A);
Writeln(A.FValue);
end;
procedure Test2;
var
A: TMyInt2;
I: Integer;
begin
A.FValue:= 0;
// A:= Inc(A); DCC error E2010
Writeln(A.FValue);
end;
begin
try
Test; // access violation
// Test2;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
कॉन्स्ट पैरामीटर का उत्परिवर्तन अजीब लगता है, है ना? रिटर्न वैल्यू के साथ फ़ंक्शन प्रोटोटाइप को अनदेखा किया जा सकता है? – kludg
यह कॉल स्थल पर उत्परिवर्तन की तरह दिखता है, लेकिन संकलक तब्दील 'इंक (मींट)' 'मींट में: = TMyInt.Inc (मींट);' हाँ, यह बहुत अजीब बात है। मैं 'इंक' और 'दिसंबर' को अधिभारित नहीं करूंगा। –