tw0947.pp 989 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. {$mode objfpc}
  2. var
  3. last,lastt2 : integer;
  4. type
  5. T1 = class
  6. procedure SomeMethod(Param: Integer); virtual;
  7. end;
  8. T2 = class(T1)
  9. procedure SomeMethod(Param: Integer); override;
  10. procedure InheritedMethod(Param: Integer);
  11. destructor Destroy; override;
  12. end;
  13. procedure T1.SomeMethod(Param: Integer);
  14. begin
  15. last:=Param;
  16. writeln('T1 ', Param);
  17. end;
  18. procedure T2.InheritedMethod(Param: Integer);
  19. begin
  20. inherited SomeMethod(Param);
  21. end;
  22. procedure T2.SomeMethod(Param: Integer);
  23. begin
  24. lastt2:=param;
  25. writeln('T2 ', Param);
  26. end;
  27. destructor T2.Destroy;
  28. begin
  29. SomeMethod(3);
  30. inherited SomeMethod(2);
  31. inherited Destroy;
  32. end;
  33. var
  34. A: T2;
  35. begin
  36. Last:=0;
  37. lastt2:=0;
  38. A:=T2.Create;
  39. A.SomeMethod(1); { Ok }
  40. if lastt2<>1 then
  41. Halt(1);
  42. A.InheritedMethod(4); { Ok }
  43. if last<>4 then
  44. Halt(1);
  45. A.Free; { error }
  46. if last<>2 then
  47. Halt(1);
  48. if lastt2<>3 then
  49. Halt(1);
  50. Writeln('Bug with calling inherited in destructors solved');
  51. end.