OOP - Como fazer?
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
Curtidas 0
Respostas
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.
Já passei por um problema parecido, mas eu estava usando Strings.
Espero ter ajudado.
GOSTEI 0
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
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;
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
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:
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