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

Nasledjivanje i dve metode sa istim imenom (Neradi)???

[es] :: C/C++ programiranje :: Nasledjivanje i dve metode sa istim imenom (Neradi)???

[ Pregleda: 2869 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.161.*



+3 Profil

icon Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 17:38 - pre 173 meseci
Evo jedne zagonetke. Poznato je da moze da se deklarise vise metoda (funkcija) sa istim imenom, a sa razlicitim argumentima.
To radi bez ikakvih problema dok se ne nasledi klasa koja ima takav set metoda i dok se ne override-uje neka takva metoda.

Evo primera:

Code:

class A{
public:
    virtual void fn(int x, int y){}
protected:
    virtual void fn(int x, int y, int z){}
};

class B:public A{
protected:
    //override
    virtual void fn(int x, int y, int z){}
};

int main()
{
    A a;
    a.fn(3,4);

    B b;
    b.fn(2,3); //error C2660: 'B::fn' : function does not take 2 arguments
}
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 17:49 - pre 173 meseci
?

b.A::fn(2,3);
 
Odgovor na temu

drki89
Igor Drljić
Prhovo

Član broj: 127027
Poruke: 56
*.mediaworksit.net.



+4 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 17:56 - pre 173 meseci
Metode u izvedenoj klasi pokrivaju metode sa istim imenom iz osnovne klase, bez obzira na broj i tip parametara.
Tj. iz klase B se vidi samo jedna metoda fn i to ova:
Citat:

virtual void fn(int x, int y, int z){}
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.161.*



+3 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 17:59 - pre 173 meseci
To je ok.

Mene interesuje u da li je moguce uraditi to sa b.fn(x,y). Da ne bi morao da menjam klasu koja barata sa sa tom klasom B. Konkretno imam tu polimorfizam sa izvedenim klasama i to radi ok, e sada se javila klasa u kojoj sam morao da overidujem funkciju fn.

Imam konteiner vector<A*> container;

I onda u zavisnosti od vrste objekta koja mi je potrebna dodajem u listu izvedene klase od klase A.
Posle se to dalje obradjuje i u zavisnosti od toga koji mi objekat treba pristupam mu preko dynamic_cast-a i pozivam metode objekta sa obj->metoda(); e sada to radi za gomilu izvedenih klasa, problem se javio kada sam morao da over ridujem jednu od funkcija sa istim imenom.

[Ovu poruku je menjao BinaryRuler dana 01.02.2010. u 19:12 GMT+1]
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:15 - pre 173 meseci
Jel mislis na ovo
Code:

class B:public A{
    public:
    virtual void fn(int x, int y){}//<<
protected:
    //override
    virtual void fn(int x, int y, int z){}
};

ili ovo sto je napisao X Files
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.161.*



+3 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:22 - pre 173 meseci
To je to Eurora3d.

Moze da posluzi i ovo sto je X Files napisao b.A::fn(2,3);,a ali ne u mom slucaju, jer imam slucaja gde overridujem metodu fn(int,int) pa bi mi kasnije u obradi pozivao metodu iz parenta a ne iz izvedene klase koju obradjujem.
 
Odgovor na temu

drki89
Igor Drljić
Prhovo

Član broj: 127027
Poruke: 56
*.mediaworksit.net.



+4 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:22 - pre 173 meseci
Nisam iz prve skontao sta si hteo. Onda je X Files odgovorio na tvoje pitanje.
Preduhitrili ste me.
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.161.*



+3 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:30 - pre 173 meseci
Kao sto rekoh jeste delimicno, nisam hteo da pozivam metodu direktno iz parent-a. Jer u slucaju polimorfizma koji imam to bi radilo za objekte kojima nije overridovana public metoda fn(int, int), ali objektima kojima bi overidovao metodu fn(int, int) pozivala bi se metoda iz parenta st ne bi bilo dobro.

Hvala u svakom slucaju na brzim odgovorima :)
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:37 - pre 173 meseci
Ja sam odavno izlapeo sa teorijom, ali kao kroz maglu se secam da je moglo nesto i sa "using" da se iskombinuje unutar izvedene klase (u smislu da se otkrije nesto iz baznih klasa). Treba pogledati neku bolju literaturu s teorijom :)
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:41 - pre 173 meseci
Nesto ovako, mada ne znam sta ce se desiti:
Code:

// ...
class B:public A{
public:
    using A::fn;
// ...

 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
79.101.161.*



+3 Profil

icon Re: Nasledjivanje i dve metode sa istim imenom (Neradi)???01.02.2010. u 18:47 - pre 173 meseci
znam i ja sam sam sebi zakomplikovao sto sam stavio ista imena metoda, ali reseno je.
To su ona pitanja iz malog mozga .
 
Odgovor na temu

[es] :: C/C++ programiranje :: Nasledjivanje i dve metode sa istim imenom (Neradi)???

[ Pregleda: 2869 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

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