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

Pitanje o nasledivanju

[es] :: Pascal / Delphi / Kylix :: Pitanje o nasledivanju

Strane: 1 2

[ Pregleda: 8934 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Pitanje o nasledivanju14.10.2013. u 10:17 - pre 127 meseci
Interesujeme da li je moguce nekako uloniti neke procedure roditeljske klase u klasi potomaka.
Primer
Klasa majmun ima osobinu rep
Klasa potomak covek naravno nema rep.
Da li je moguce i kako to uraditi?
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.teol.net.



+62 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 10:39 - pre 127 meseci
Da se ne bi sad smarali ovde ;), kucaj u Delphi helpu-u "hiding properties" i/ili slicno. Ima o tome dosta, ako se dobro secam.

Pozz
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.235.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 11:25 - pre 127 meseci
Resenje: Ne izvoditi Covek iz Majmun - ocigledno nije dobar dizajn.

Code:
           
                     Zajednicki Predak
                             |
                             |
                    ___________________
                    /                 \
                   /                   \
                 Covek               Majmun



 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 11:32 - pre 127 meseci
Citat:
Burgos: Resenje: Ne izvoditi Covek iz Majmun - ocigledno nije dobar dizajn.

Code:
           
                     Zajednicki Predak
                             |
                             |
                    ___________________
                    /                 \
                   /                   \
                 Covek               Majmun



Cini mi se da je tvoja ideja malo retrogradna, ali kolo sam ja citao nije moguce sakriti pojedine osobine u nasledenoj klasi.
Zasto mislim da nije bas primenjiva jer bih onda klase morao po potrebi da pravim unazad ,a ne da ih nasledujem i dopunjujem i popravljam po potrebi.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 11:48 - pre 127 meseci
Tehnicki, covek ima rep. :)

Ono sto tebi treba su interfejsi:

Code:

type
  ITail = interface(IInterface)
    function HasTail: Boolean;

    property Tail: Boolean read HasTail;
  end;

  TApe = class(TInterfacedObject, ITail)
  private
    function HasTail: Boolean;
  public
  end;

  THuman = class(TApe)
  private
  public
  end;
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.235.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 16:48 - pre 127 meseci
Citat:
Milan Milosevic:
Zasto mislim da nije bas primenjiva jer bih onda klase morao po potrebi da pravim unazad ,a ne da ih nasledujem i dopunjujem i popravljam po potrebi.



Ako bi mogao da izbaciš metode koje su definisane u osnovnoj klasi, koliko korektno bi polimorfizam radio?
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 17:43 - pre 127 meseci
Citat:
Burgos: Ako bi mogao da izbaciš metode koje su definisane u osnovnoj klasi, koliko korektno bi polimorfizam radio?

Nemoras da ih izbacis, jednostavno delovi koji nisu potrebni za dalji razvoj klase bi po meni trebali da budu nevidljivi, za korisnika klase ali i za sve nasledne klase.
Za ono sto funkcionalno koristis najnormalnije nasledujes i menjas.
Tako bi po meni smanjio broj vidljivih metoda koje zapravo imaju smisla za to zasta ti klasa treba.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.178.235.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 17:49 - pre 127 meseci
Ako ti nešto označiš kao privatno, ti si to izbacio iz klase, gledajući sa strane korisnika.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju14.10.2013. u 18:15 - pre 127 meseci
Nema svrhe da se nadmudrujemo ovde, mene interesuje dali je to uopste moguce u delphiju i ako jeste kako da to uradim.
Naravno da meni ne smeta da covek ima i rep ako ga ne koristi , ako i svi njegovi potomci , jer ukoliko definices neku proceduru kao
private za datu klasu ona nece biti vidljiva korisnuku kada koristi datu klasu, ali ukoliko je nasleduje imace je u potomku jer je nasleduje od polazne klase.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.teol.net.



+62 Profil

icon Re: Pitanje o nasledivanju15.10.2013. u 08:59 - pre 127 meseci
Evo sta kaze Embacadero:

http://docwiki.embarcadero.com/RADStudio/XE5/en/Properties

pogledati pod "Property Overrides and Redeclarations".

Medjutim, pravi odgovor je u redefiniciji klasa. Klasa "zajednicki predak" treba da ima property Rep, ali kao protected. Klasa "majmun" samo redeklarise property u public, a klasa "covek" - nista: to mu tacno dodje fakt da smo svi mi (tehnicki) reponje :) .

Pozz
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pitanje o nasledivanju15.10.2013. u 11:48 - pre 127 meseci
"NeVidljivMetod" je nevidljiv kada je funkcija (procedura) koju Ancestor poziva.
Ako neme potrebe da se nasleđuje nema potrebe ni da bude metod nego funkcija (procedura).

type
TAncestor = class
procedure VidljivMetod;
end;

TDerived = class(TAncestor)
end;

...

procedure NeVidljivMetod;
begin
...
end;

procedure TAncestor.VidljivMetod;
begin
NeVidljivMetod;
end;


 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 02:05 - pre 127 meseci
Evo kako bi bio precizniji odgovor.
Kad je Ancestor u drugom unitu onda private radi.
Ako je u istom onda se ne može sakriti sa private, ali može sa strict private.


Code (delphi):


type
  TAncestor = class
    procedure VidljivMetod;
  strict private
    procedure NevidljivMetod;
  end;

  TDerived = class(TAncestor)
  end;


...

procedure TAncestor.VidljivMetod;
begin
//
end;

procedure TAncestor.NevidljivMetod;
begin
//
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Derived: TDerived;
begin
  Derived := TDerived.Create;
//  Derived.
  Derived.Free;
end;

 



 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 02:13 - pre 127 meseci

Ustvari još preciznije bi bilo da strict private radi od d7.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 06:39 - pre 127 meseci
Sve je to jasno nego nemozes unapred da predvidis sta ce nasledna klasa da odbaci, a sta nece.
U TAncestor klasu sve definises kao javno ili protected sta zelim da nasledujem iz osnovne klase.
Neke nasledne linije bi trebale da imaju rep, a neke ne kao recimo covek i njegovi potomci.
Kada u klasi covek sakrijes osobinu ili proceduru rep ona nasledicima i dalje ce biti vidljiva jer postoji u klasi predka
Tako da mi se cini da je nemoguce ukloniti rep ljudskoj liniji naslednika, vec svim naslednim klasama ga treba sakrivati za korisnike.
Ovo je po meni previse naporno za neke ozbiljno razradene klase.
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
*.teol.net.



+62 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 09:48 - pre 127 meseci
Hm, ako se radi samo o procedurama/funkcijama, a ne propertijima, onda ima i jedan drugi mehanizam.

Pogledati u helpu za klasu TControl, WindowProc i WndProc. Jedno je procedura tipa TWndMethod, a drugo je property (event) takodje tipa TWndMethod. Property WndProc je upravo napucan na WindowProc, i svi pozivi WindowProc-a idu preko propertija WndProc. Na taj nacin, kad programer zeli da promeni ponasanje kontrole, jednostavno podmetne svoju proceduru (dodeli je propertiju WndProc). Posto je property/event WndProc tipa TWndMethod, moze mu se dodeliti i nil ;) ... drzi li ovo vodu?

Pozz

P.S. Mozda se metod i property ne zovu bas tako kako sam napisao (iz glave), ali opisani mehanizam postoji, i radi.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 10:37 - pre 127 meseci
Citat:
Sve je to jasno nego nemozes unapred da predvidis sta ce nasledna klasa da odbaci, a sta nece.
U TAncestor klasu sve definises kao javno ili protected sta zelim da nasledujem iz osnovne klase.
Neke nasledne linije bi trebale da imaju rep, a neke ne kao recimo covek i njegovi potomci.
Kada u klasi covek sakrijes osobinu ili proceduru rep ona nasledicima i dalje ce biti vidljiva jer postoji u klasi predka
Tako da mi se cini da je nemoguce ukloniti rep ljudskoj liniji naslednika, vec svim naslednim klasama ga treba sakrivati za korisnike.



Kada staviš strict private u istom unitu ili private u drugom, a ne protected, onda je nećeš videti.

U mom primeru nema protectred, treba jednostavno da se potrudiš barem malo i pogledaš kako radi.
 
Odgovor na temu

Milan Milosevic

Član broj: 67
Poruke: 932
*.dynamic.isp.telekom.rs.



+31 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 13:19 - pre 127 meseci
Citat:
tkaranovic: Kada staviš strict private u istom unitu ili private u drugom, a ne protected, onda je nećeš videti.

U mom primeru nema protectred, treba jednostavno da se potrudiš barem malo i pogledaš kako radi.

Pa pogledao sam i upravo radi onako kako sam napisao.
Ne mogu nesto da stavim u strict private ukoliko zelim tu osobinu da nasledujem u nekim klasama.
Jednostavno u nekim zelim u nekim ne. Unapred nemogu znati kad ce sta da mi treba iz osnovne klase. Meni je bitno
da ona radi zasta je namenjena.
 
Odgovor na temu

tkaranovic
Tomislav Karanović
Beograd

Član broj: 220507
Poruke: 307



+18 Profil

icon Re: Pitanje o nasledivanju16.10.2013. u 15:07 - pre 127 meseci
Evo ovako može da se za svaku podklasu drgačije definišu metodi koje će koristiti:

Code:
 
  Tmetod1 = procedure (const Value: string) of object;
  Tmetod2 = procedure () of object;

  TDerived1 = class;
  TDerived2 = class;

  TAncestor = class
    procedure LoadMetods(MetodName: string; var Derived: TObject);
  strict private
    procedure Metod1(const Value: string);
    procedure Metod2;
  end;

  TDerived1 = class(TAncestor)
    FMetod1: Tmetod1;
    property metod1: Tmetod1 read FMetod1 write FMetod1;
  end;

  TDerived2 = class(TAncestor)
  strict private
    FMetod2: Tmetod2;
  public
    property metod2: Tmetod2 read FMetod2 write FMetod2;
  end;
...

procedure TAncestor.LoadMetods(MetodName: string; var Derived: TObject);
begin
  if MetodName = 'Metod1' then
    if Derived is TDerived1 then
      TDerived1(Derived).metod1 := Metod1;

  if MetodName = 'Metod2' then
    if Derived is TDerived2 then
      TDerived2(Derived).metod2 := Metod2;
end;

procedure TAncestor.Metod1(const Value: string);
begin
  showmessage(Value);
end;

procedure TAncestor.Metod2;
begin
  showmessage('Metod2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Derived1: TDerived1;
  Derived2: TDerived2;
begin
  Derived1 := TDerived1.Create;
  Derived1.LoadMetods('Metod1', TObject(Derived1));
  if Assigned(Derived1.metod1) then
    Derived1.metod1('asdf');
  Derived1.Free;

  Derived2 := TDerived2.Create;
  Derived2.LoadMetods('Metod2', TObject(Derived2));
  if Assigned(Derived2.metod2) then
    Derived2.metod2;
  Derived2.Free;
end;


 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
*.dynamic.sbb.rs.

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pitanje o nasledivanju19.10.2013. u 01:17 - pre 127 meseci
Veoma interesantna tema :)
Citat:
Milan Milosevic: Jednostavno u nekim zelim u nekim ne. Unapred ne mogu znati kad ce sta da mi treba iz osnovne klase. Meni je bitno da ona radi zasta je namenjena.

Mislim da je u ove dve recenice sazet tvoj problem, a cini mi se da je to neispravno razmisljanje / postavljanje stvari.

Klasa roditelj ne bi ni trebalo da brine (zna) sta ce da rade klase potomci, a tu spada i specificna implementacija za svakog (novog i moguceg) potomka. Klasa roditelj treba da pruzi zajednicki okvir za svoje potomke (koji je uvek isti, garantovan interfejsom klase), a na njima je kako ce se oni dalje ponasati (u kom smeru ce se siriti njihova funkcionalnost, ili kako ce oni vec menjati funkcionalnost klase roditelja).

Slozio bih se sa onim sto ti je Burgos rekao - za primer koji si naveo, dizajn deluje pogresno. Sustina nasledjivanja je omogucavanje razlicitih nivoa apstrakcije odredjenog problema, gde se polazi od viseg nivoa apstrakcije u klasi roditelja (generalizovana funkcionalnost) i dalje specijalizuje kroz klase naslednike (specificne funkcionalnosti).

Ako bi se dozvolilo da naslednici proizvoljno izbacuju funckionalnost roditelja, cela prica bi izgubila smisao i vise niko ziv ne bi znao sta koja klasa moze imati/raditi i odakle je to nasledila. Kao sto je Burgos vec primetio, polimorfizam ne bi postojao jer vise niko ne bi mogao da garantuje da naslednici sadrze sve elemente roditelja. Ono sto si jednom "obecao" proglasivsi ga npr. javnim, ne mozes vise vratiti da bude privatno, nema tu uzimala-davala :) Mozes dati samo vise (protected proglasiti public), nikad manje.

Dalje, cak i da je moguce, ovo bi samo omogucilo jos veci haos u dizajnu klasa. Zamislimo sledeci primer:
Code:
TSuperKlasa = class
  Kljun: TKljun;
  Krila: TKrila;
  Auspuh: TAuspuh;
  Sediste: TSediste;
end;

TPtica = class(TSuperKlasa)
public
  Kljun: TKljun;
  Krila: TKrila;
end;

TAuto = class(TSuperKlasa)
public
  Auspuh: TAuspuh;
  Sediste: TSediste;
end;

Uz pretpostavku da osobine koje nismo proglasili javnim u potomcima vise ne postoje, ovakvo mesanje baba i zaba bi na duze staze bila ogromna glavobolja. Ogranicenja koja postoje su (obicno ;)) tu s razlogom, nekada se zbog njih mora malo vise razmisljati na pocetku, ali je zato kasnije mnogo lakse - u suprotnom bi na pocetku pisali sta nam prvo padne na pamet, a kasnije bi se hvatali za glavu sta sad da radimo. Lako je kad je projekat mali, ali kako raste tako i najmanje omaske u dizajnu postaju itekako uocljive i problematicne, pa je zato vrlo vazno od pocetka raditi sto ispravnije.

Medjutim, ako sam te dobro razumeo, tebi je zapravo problem kako da sakrijes neke stvari iz npr. menija koji daje Code Completion (jer je inace nemoguce da sprecis korisnika da koristi ono sto mu po pravilima nasledjivanja sleduje, a kojih se Delphi drzi). E sad, ako mozemo da se slozimo da je ovo suprotno ideji nasledjivanja, a ti sa druge strane ne zelis da menjas dizajn klasa roditelja, mogu da ti predlozim da umesto nasledjivanja koristis kompoziciju, primer:
Code:
TPtica = class
  private
    SuperKlasa: TSuperKlasa;
    function GetKljun(): TKljun;    
  public
    property Kljun: TKljun read GetKljun;
end;

implementation

function TPtica.GetKljun(): TKljun;
begin
  Result := Self.SuperKlasa.Kljun;
end;

Na ovaj nacin mozes iz klase TSuperKlasa koristiti (prikazati) samo onu funkcionalnost koja ti zapravo treba u novoj klasi TPtica, pritom nikoga ne dovodeci u zabludu da li je TPtica naslednik TSuperKlasa ili ne, sakrivanjem funkcionalnosti koja ti nije potrebna. TPtica nije naslednik (potomak) TSuperKlasa, ali ce njeni naslednici moci da koriste funkcionalnost iz TSuperKlasa koju im TPtica omoguci. Naravno, ne treba posebno napominjati da je duznost i obaveza klase TPtica da se postara da ta funkcionalnost iz TSuperKlasa bude ispravna (obzirom da se ne koristi cela TSuperKlasa).
 
Odgovor na temu

((BugA))
Igor Djordjevic
Bor, Srbija

Član broj: 29241
Poruke: 196
*.dynamic.sbb.rs.

ICQ: 66516695
Sajt: www.MalamutKlub.com


+17 Profil

icon Re: Pitanje o nasledivanju19.10.2013. u 01:44 - pre 127 meseci
Citat:
tkaranovic: Evo ovako može da se za svaku podklasu drgačije definišu metodi koje će koristiti:

Code:
 
  Tmetod1 = procedure (const Value: string) of object;
  Tmetod2 = procedure () of object;

  TDerived1 = class;
  TDerived2 = class;

  TAncestor = class
    procedure LoadMetods(MetodName: string; var Derived: TObject);
  strict private
    procedure Metod1(const Value: string);
    procedure Metod2;
  end;

  TDerived1 = class(TAncestor)
    FMetod1: Tmetod1;
    property metod1: Tmetod1 read FMetod1 write FMetod1;
  end;

  TDerived2 = class(TAncestor)
  strict private
    FMetod2: Tmetod2;
  public
    property metod2: Tmetod2 read FMetod2 write FMetod2;
  end;
...

procedure TAncestor.LoadMetods(MetodName: string; var Derived: TObject);
begin
  if MetodName = 'Metod1' then
    if Derived is TDerived1 then
      TDerived1(Derived).metod1 := Metod1;

  if MetodName = 'Metod2' then
    if Derived is TDerived2 then
      TDerived2(Derived).metod2 := Metod2;
end;

procedure TAncestor.Metod1(const Value: string);
begin
  showmessage(Value);
end;

procedure TAncestor.Metod2;
begin
  showmessage('Metod2');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Derived1: TDerived1;
  Derived2: TDerived2;
begin
  Derived1 := TDerived1.Create;
  Derived1.LoadMetods('Metod1', TObject(Derived1));
  if Assigned(Derived1.metod1) then
    Derived1.metod1('asdf');
  Derived1.Free;

  Derived2 := TDerived2.Create;
  Derived2.LoadMetods('Metod2', TObject(Derived2));
  if Assigned(Derived2.metod2) then
    Derived2.metod2;
  Derived2.Free;
end;



Dok ce ovo raditi, mislim da takodje nije dobar primer dizajna - klasa TAncestor se ovde bavi implementacijom u zavisnosti od tipa klase naslednika, sto znaci da (1) za svakog novog naslednika moramo menjati i klasu TAncestor i dodavati implementaciju shodno novom tipu naslednika, i (2) svaka klasa naslednik ce nepotrebno "vuci" sav kod klase TAncestor u kome se, izmedju ostalog, nalazi i implementacija koja nema nikakve veze sa tom odredjenom klasom naslednika, vec sa svim ostalim klasama koje su ikada nasledile klasu TAncestor.

Mislim da se konkretan "problem" treba resavati na nivou gde se i javlja, na nivou potomka. Ako potomci zele da nesto rade na drugaciji nacin, njihova volja, ali ne smeju time opterecivati klasu roditelja, nju to ne treba da zanima (osim ako se to ne odnosi na sve potomke, na isti nacin).

Evo na brzinu doradjenog tvog primera gde klasa TAncestor ostaje uvek ista i ne bavi se implementacijom funkcionalnosti naslednika, vec to rade naslednici shodno svojim potrebama, a krajnji rezultat je isti.
Code:
  Tmetod1 = procedure (const Value: string) of object;
  Tmetod2 = procedure () of object;

  TAncestor = class
   private
     FMethod: TMethod;
   protected
     property Method: TMethod read FMethod write FMethod;
   end;

   TDerived1 = class(TAncestor)
   private
     Metod1: TMetod1;
     procedure DoMetod1(const Value: string);
   public
     constructor Create();
     property Method;
   end;

   TDerived2 = class(TAncestor)
   private
     Metod2: TMetod2;
     procedure DoMetod2();
   public
     constructor Create();
     property Method;
   end;

...

{ TDerived1 }

constructor TDerived1.Create();
begin
  Self.Metod1 := Self.DoMetod1;
  Self.Method := TMethod(Self.Metod1);
end;

procedure TDerived1.DoMetod1(const Value: string);
begin
  ShowMessage(Value);
end;

{ TDerived2 }

constructor TDerived2.Create;
begin
  Self.Metod2 := Self.DoMetod2;
  Self.Method := TMethod(Self.Metod2);
end;

procedure TDerived2.DoMetod2();
begin
  ShowMessage('Metod2');
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  Derived1: TDerived1;
  Derived2: TDerived2;
begin
  Derived1 := TDerived1.Create();
  try
    TMetod1(Derived1.Method)('asdf'); // prikazuje "asdf"
  finally
    Derived1.Free();
  end;
  //
  Derived2 := TDerived2.Create();
  try
    TMetod2(Derived2.Method)(); // prikazuje "Metod2"
  finally
    Derived2.Free();
  end;
end;

Medjutim, kad ovako postavimo stvari, mislim da postaje ocigledno da nesto skripi u dizajnu :) Osim ako ne postoji izricita potreba da se ovo odradi na takav nacin (iz nekog opravdanog razloga), cini mi se mnogo logicnije uraditi sledece:
Code:
  Tmetod1 = procedure (const Value: string) of object;
  Tmetod2 = procedure () of object;

  TAncestor = class
  end;

  TDerived1 = class(TAncestor)
  public
    Metod1: Tmetod1;
  end;

  TDerived2 = class(TAncestor)
  public
    Metod2: Tmetod2;
  end;

U prevodu, ako su Metod1 i Metod2 totalno razliciti, a svaki je vezan iskljucivo za svoju klasu (TDerived1 ili TDerived2), nema nikakve potrebe da se oba nadju u klasi roditelja TAncestor, nije im tu mesto.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pitanje o nasledivanju

Strane: 1 2

[ Pregleda: 8934 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

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