Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

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

  • 10 odgovora
  • 4.330 pregleda

Najnovija ↓

Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 18:38 · pre 203 meseca #1
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
}
Re: Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 18:56 · pre 203 meseca #3
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){}
Re: Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 18:59 · pre 203 meseca
izmenjeno 1 put, poslednji put BinaryRuler 01.02.2010. u 19:12
  1. BinaryRuler01.02.2010. u 19:12zapis iz teksta poruke
#4
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.
Re: Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 19:22 · pre 203 meseca #6
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.
Re: Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 19:30 · pre 203 meseca #8
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 :)
Re: Nasledjivanje i dve metode sa istim imenom (Neradi)??? 01.02.2010. u 19:37 · pre 203 meseca #9
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 :)
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme