OOP - Como fazer?

04/06/2008

1

Não consigo fazer funcionar a minha calculadora abaixo, no caos somente o método soma. Preciso num outro Form, chamar a minha classe Calculadora e fazer funcionar. Consigo instanciar a classe e chamar o método soma, mas dá erro de Stack Overflow. Como faço para funcionar? Sei que tem muita coisa errada aí, mas postei para aprender a usar esse troço.

unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TCalculadora = class private FOp1, FOp2: integer; procedure SetOp1(Value: integer); procedure SetOp2(Value: integer); function GetOp1: integer; function GetOp2: integer; public property Op1: integer read GetOp1 write SetOp1; property Op2: integer read GetOp2 write SetOp2; function Soma: integer; function Resta: integer; end; implementation { TCalculadora } function TCalculadora.GetOp1: integer; begin Result := FOp1; end; function TCalculadora.GetOp2: integer; begin Result := FOp2; end; function TCalculadora.Resta: integer; begin end; procedure TCalculadora.SetOp1(Value: integer); begin if Value <> FOp1 then Op1 := Value; end; procedure TCalculadora.SetOp2(Value: integer); begin if Value <> FOp2 then Op2 := Value; end; function TCalculadora.Soma: integer; begin result := FOp1 + FOp2; end; end.



Responder

Posts

04/06/2008

Brunodsr

N sei se entendi mto bem, mas da uma olhada no sharemem do dephi, via help.

Já passei por um problema parecido, mas eu estava usando Strings.

Espero ter ajudado.


Responder
nos seus métodos SetXXX o correto seria atribuir o valor ao campo FXXX e não à propriedade.


Responder

05/06/2008

Cicero-padim

Bem não é pra existir erro se vc colocar dois métodos indispensaveis para uma classe em Delphi
são eles

constructor Create;
destructor Destroy;

Os métodos para inicialização e finalização da classe tente eles
Há e não esqueça de inicializar as varieveis private;

Cícero;


Responder
os métodos Create e Destroy são dispensáveis neste caso, pois você não tem a necessidade de criar outras instâncias de classe dentro da sua classe. a única coisa que eu observei realmente foi a atribuição à propriedade nos métodos SetXXX e deveria ser feita atribuição aos campos.
veja o exemplo:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TCalculadora = class
  private
    FOp1, FOp2: integer;
    procedure SetOp1(Value: integer);
    procedure SetOp2(Value: integer);
    function GetOp1: integer;
    function GetOp2: integer;
  public
    property Op1: integer read GetOp1 write SetOp1;
    property Op2: integer read GetOp2 write SetOp2;
    function Soma: integer; overload;
    function Soma(Valor1, Valor2: integer): integer; overload;
    function Resta: integer;
  end;

implementation

{ TCalculadora }

function TCalculadora.GetOp1: integer;
begin
  Result := FOp1;
end;

function TCalculadora.GetOp2: integer;
begin
  Result := FOp2;
end;

function TCalculadora.Resta: integer;
begin

end;

procedure TCalculadora.SetOp1(Value: integer);
begin
  if Value <> FOp1 then
    FOp1 := Value; // era: Op1 := Value;
end;

procedure TCalculadora.SetOp2(Value: integer);
begin
  if Value <> FOp2 then
    FOp2 := Value; // era: Op2 := Value;
end;

function TCalculadora.Soma: integer;
begin
  result := FOp1 + FOp2;
end;

function TCalculadora.Soma(Valor1, Valor2: integer): integer;
begin
  result := Valor1 + Valor2;
end;



Responder