09. januar 2006 - 22:10Der er
7 kommentarer og 1 løsning
Static keyword i Delphi?
Jeg har lavet et eksempel hvor jeg opretter 101 forskellige objekter. Mit spørgsmål er om mine variable a,b,c ikke kunne oprettes blot én gang istedet for at jeg opretter dem 101 gange. I Java er der vist et static keyword, som måske kunne bruges i sådanne tilfælde - hvad gør man i Delphi?
Ligeledes vil jeg høre, hvor jeg bør skrive min randomize linje?
Hvis logikken i eksemplet burde være helt anderledes og det vil løse mit problem er det selvfølgeligt også en mulihed, som jeg er åben over for.
Nedenfor er klasse og main-procedure.
Venlig hilsen
Flycht
unit renteUnit; interface uses math; type CRente = class(TObject) public shortRate:double; a,b,c:double; constructor create();overload; procedure setA(a:double); procedure setB(b:double); procedure simulate; end; implementation
constructor CRente.create(); begin a:=2; b:=5; c:=ln(a)*exp(b/2); simulate end;
procedure CRente.setA(a:double); begin self.a:=a; simulate end; procedure CRente.setB(b:double); begin self.b:=b; simulate end; procedure Crente.simulate(); begin shortRate:=a*b*c*randG(0,1); end;
procedure TForm3.Button1Click(Sender: TObject); var r: array[0..100] of Crente; i :integer; begin for i:=0 to 100 do r[i]:=Crente.create(); end;
Hvis jeg forstår dig rigtigt så er det konstanter du er ude efter (const keyword): implementation const a: double = 2; b: double = 5; c: double = ln(a)*exp(b/2); hvis jeg husker syntaksen rigtig på stående fod :-) Randomize skal kun kaldes en gang, f.eks. som første linje i Button1Click eller i formens OnCreate.
Konstanter kan godt ændres (variable konstanter!). Afhængig af en kompiler option tillader eller afviser kompileren at konstanter ændres. Hvis du fjerner dine a,b,c variabler fra din CRente class fungerer dine setA og setB metoder uændret. Randomize skal kaldes et eller andet sted. Om det god eller dårlig praksis er så et teoretisk spørgsmål.
Hvad er så egentligt forskellen på variable og konstanter? Og skal følgende linje så stå i min kode? {$WriteableConst On}
Kan man tjekke hvor mange objekter, der er lavet af en given klasse og således sørge for at randomize kun kaldes første gang, der laves et objekt af klassen?
Du skriver blot {$J+}. Hvis man tillader at ændre konstanter er forskellen ikke så stor, bortset fra at du kan nøjes med at skrive const a = 2; altså uden angivelse af type, så kan den aldrig ændres. Du skal nok selv holde styr på hvor mange instanser du laver f.eks. med en variabel. Men da randomize gælder for hele applikationen er det lidt "griseri" at styre det inde fra en "tilfældig" klasse.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.