[ BinaryRuler @ 01.02.2010. 17:38 ] @
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
}
[ X Files @ 01.02.2010. 17:49 ] @
?

b.A::fn(2,3);
[ drki89 @ 01.02.2010. 17:56 ] @
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){}
[ BinaryRuler @ 01.02.2010. 17:59 ] @
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]
[ Eurora3D Team @ 01.02.2010. 18:15 ] @
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
[ BinaryRuler @ 01.02.2010. 18:22 ] @
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.
[ drki89 @ 01.02.2010. 18:22 ] @
Nisam iz prve skontao sta si hteo. Onda je X Files odgovorio na tvoje pitanje.
Preduhitrili ste me.
[ BinaryRuler @ 01.02.2010. 18:30 ] @
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 :)
[ X Files @ 01.02.2010. 18:37 ] @
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 :)
[ X Files @ 01.02.2010. 18:41 ] @
Nesto ovako, mada ne znam sta ce se desiti:
Code:

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

[ BinaryRuler @ 01.02.2010. 18:47 ] @
znam i ja sam sam sebi zakomplikovao sto sam stavio ista imena metoda, ali reseno je.
To su ona pitanja iz malog mozga .