Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

naknadno deklariranje globalne varijable

[es] :: Pascal / Delphi / Kylix :: naknadno deklariranje globalne varijable

[ Pregleda: 2191 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.dsl.iskon.hr.



+10 Profil

icon naknadno deklariranje globalne varijable07.11.2009. u 19:52 - pre 175 meseci
ovako...
2 klase

Code:

TNadredeni = class()
 procedure jedi();
end;


Code:

TPodredeni = class()
 procedure pij();
end;


pitanje je sljedece. da li mogu deklarirat globalnu varijablu, ali tijekom izvodjenja programa mijenjat njezin tip?
konkretno ne mijenjat tip, nego odredit tip u nekom trenutku kada mi je poznato kojeg tipa je varijabla?

npr prvo mi je var a:TNadredeni;

pokusao sam destroy-at a, i napravit a:=TPodredeni.Create; sto prolazi, ali ne mogu koristit funkciju a.pij(); nigdje u pisanju koda.
>>Mirkec<<
 
Odgovor na temu

xenox
ex Memodata sysadmin
Beograd

Član broj: 6903
Poruke: 168
195.178.35.*

ICQ: 7682925


+3 Profil

icon Re: naknadno deklariranje globalne varijable07.11.2009. u 23:39 - pre 175 meseci
pa deklarisi tu globalnu kao pointer, pa je rokaj kako god hoces...
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.dsl.iskon.hr.



+10 Profil

icon Re: naknadno deklariranje globalne varijable07.11.2009. u 23:42 - pre 175 meseci
moze primjer?
>>Mirkec<<
 
Odgovor na temu

franjo_tahi
Franjo Tahi
Zagreb

Član broj: 34712
Poruke: 399
*.adsl.net.t-com.hr.



+1 Profil

icon Re: naknadno deklariranje globalne varijable09.11.2009. u 07:50 - pre 175 meseci
može i variant...
Code:

procedure TForm1.Button1Click(Sender: TObject);
var a: Variant;
    b: string;
    c: Integer;
begin
   b := '123';
   a := b;
   c := a;
   ShowMessage(IntToStr(c));
end;


samo treba paziti, asko se pretvara iz jednog tipa u drugi, da je to moguće, jer ako umjesto '123' naipšeš 'abc', compiler neće javiti grešku, ali će se javiti greška kod izvršavanja programa.
 
Odgovor na temu

stankons
Stanko Milošev
ise Gmbh, Deutschland
Bonn

Član broj: 99408
Poruke: 231
*.trinet.si.

ICQ: 147767352
Sajt: www.milosev.com


Profil

icon Re: naknadno deklariranje globalne varijable09.11.2009. u 08:16 - pre 175 meseci
Evo još jedan predlog:

Code:

  TAbstract = class
     procedure jedi();  virtual; abstract;
     procedure pij();  virtual; abstract;
  end;

  TNadredeni = class(TAbstract)
     procedure jedi(); override;
  end;

  TPodredeni = class(TAbstract)
     procedure pij();  override;
  end;
 
Odgovor na temu

buha18
mali mirkec
vratisinec

Član broj: 57193
Poruke: 161
*.adsl.net.t-com.hr.



+10 Profil

icon Re: naknadno deklariranje globalne varijable09.11.2009. u 08:37 - pre 175 meseci
zahvaljujem svima.

Code:
 variant
ne prolazi
Code:
[Error] Unit1.pas(257): Incompatible types: 'Variant' and 'Sustav'


najvjerojatnije cu napravit kao sto stankons rece.
>>Mirkec<<
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: naknadno deklariranje globalne varijable11.11.2009. u 06:12 - pre 175 meseci
Citat:
buha18: ovako...
2 klase

Code:

TNadredeni = class()
 procedure jedi();
end;


Code:

TPodredeni = class()
 procedure pij();
end;


pitanje je sljedece. da li mogu deklarirat globalnu varijablu, ali tijekom izvodjenja programa mijenjat njezin tip?
konkretno ne mijenjat tip, nego odredit tip u nekom trenutku kada mi je poznato kojeg tipa je varijabla?



Mogu da se pozovu samo ovako:

Code:

 TNadredeni(nil).jedi;
 TPodredeni(nil).pij;


Uz napomenu da ovakav poziv kao primer nema u helpu, knjigama, Internetu (nisam video) a u Delphi help(ovima)u ima ovaj primer:

Code:

type
  TFigure = class
    procedure Draw;
  end;
  TRectangle = class(TFigure)
    procedure Draw;
  end;
...
var
  Figure: TFigure;
begin
  Figure := TFigure.Create;
  Figure.Draw;  // calls TFigure.Draw
  Figure.Destroy;
  Figure := TRectangle.Create;
  Figure.Draw;  // calls TFigure.Draw
  TRectangle(Figure).Draw;  // calls TRectangle.Draw
  Figure.Destroy;
...


U pretposlednjem redu citata (TRectangle(Figure).Draw;) poziva se metoda klase TRectangle a koristi se za taj poziv objekat klase TFigure. Objekat Figure je instanca klase TFigure a ta klasa nema metodu klase TRectangle koja se poziva. Kreirani objekat Figure nema metodu koja se poziva na ovaj način. To onda znači da se taj poziv odvija u okviru klase TRectangle i ako nije kreiran objekat te klase. Što znači da je preko metaobjekta klase TRectangle pozvan metod. Pošto se može pozvati ovako metoda klase (TRectangle) čiji objekat nije kreiran onda se može pozvati i bez bilo kakvog objekta (nil), jer metaobjektu klase TRectangle nije potrebna instanca klase TFigure.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
93.86.19.*



+62 Profil

icon Re: naknadno deklariranje globalne varijable16.11.2009. u 12:35 - pre 174 meseci
Code:

 TNadredeni(nil).jedi;
 TPodredeni(nil).pij;


Ovo moze da radi SAMO AKO u metodama jedi() i pij() nema poziva self; inace, karambol (EAccessViolation). Za detaljnije objasnjenje, pogledati u help-u TMethod (doduse, izgleda da ovoga nema u novijim Delphi-jima, posle 7-ice).

Onaj primer sa TFigure ce raditi sasvim drugacije ako se iskoriste virtual i override sluzbene reci. Ali to ovde nije tema...


Rajko
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: naknadno deklariranje globalne varijable16.11.2009. u 15:59 - pre 174 meseci
Citat:
Rapaic Rajko:

Ovo moze da radi SAMO AKO u metodama jedi() i pij() nema poziva self; inace, karambol (EAccessViolation). Za detaljnije objasnjenje, pogledati u help-u TMethod (doduse, izgleda da ovoga nema u novijim Delphi-jima, posle 7-ice).

Onaj primer sa TFigure ce raditi sasvim drugacije ako se iskoriste virtual i override sluzbene reci. Ali to ovde nije tema...


Jeste sve to tema u smisu da se mora voditi računa o svemu što je vezano za metodu a može da radi samo kada je kreiran objekat, kome pripada metoda koja se poziva.

Evo primera u kojem se koristi TMethod:

Code:

var  
     JedIiliPijP: procedure() of object;
begin
  TMethod(JedIiliPijP).Code := addr(TNadredeni.jedi);
  //if assigned(JedIiliPijP) then
    JedIiliPijP();
  TMethod(JedIiliPijP).Code := addr(TPodredeni.pij);
  //if assigned(JedIiliPijP) then
    JedIiliPijP();


 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: naknadno deklariranje globalne varijable

[ Pregleda: 2191 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.