OOP - Como fazer?

Delphi

04/06/2008

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.



Paulo

Paulo

Curtidas 0

Respostas

Brunodsr

Brunodsr

04/06/2008

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.


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/06/2008

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


GOSTEI 0
Cicero-padim

Cicero-padim

04/06/2008

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;


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/06/2008

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;



GOSTEI 0
POSTAR