tw0938.pp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. Program test_operator;
  2. type
  3. Vector = record
  4. X,Y,Z : extended;
  5. end;
  6. Matrix = array [1..4,1..4] of extended;
  7. Const
  8. IDENTITYMATRIX : Matrix =
  9. ( (1,0,0,0),
  10. (0,1,0,0),
  11. (0,0,1,0),
  12. (0,0,0,1));
  13. {...}
  14. function NewVector (ax,ay,az : extended) : Vector;
  15. begin
  16. NewVector.X:=ax;
  17. NewVector.Y:=ay;
  18. NewVector.Z:=az;
  19. end;
  20. operator * (V : Vector;Value : extended) Result : Vector;
  21. begin
  22. Result.X:=Result.X*Value;
  23. Result.Y:=Result.Y*Value;
  24. Result.Z:=Result.Z*Value;
  25. end;
  26. {...}
  27. operator * (Value : extended;V : Vector) Result : Vector;
  28. begin
  29. Result.X:=Result.X*Value;
  30. Result.Y:=Result.Y*Value;
  31. Result.Z:=Result.Z*Value;
  32. end;
  33. {...}
  34. operator * (M : Matrix;Value : extended) Result : Matrix;
  35. var i,j : longint;
  36. begin
  37. for i:=1 to 4 do
  38. for j:=1 to 4 do
  39. Result[i,j]:=M[i,j]*Value;
  40. end;
  41. {...}
  42. operator * (Value : extended;M : Matrix) Result : Matrix;
  43. var i,j : longint;
  44. begin
  45. for i:=1 to 4 do
  46. for j:=1 to 4 do
  47. Result[i,j]:=M[i,j]*Value;
  48. end;
  49. {...}
  50. var
  51. V1, V2 : Vector;
  52. M1, M2 : Matrix;
  53. begin
  54. V1 := NewVector (1,1,1);
  55. V2 := V1 * 2;
  56. { Everything ok }
  57. M2 := IDENTITYMATRIX;
  58. M1 := M2 * 2;
  59. M1 := IDENTITYMATRIX * 2;
  60. M2 := IDENTITYMATRIX * 4;
  61. { Error: Incompatible types: got "E3MATRIX" expected "LONGINT" in both rows. This doesn't happen if I use 2.0 and 4.0 values. }
  62. {...}
  63. end.