Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++, wytłumaczenie kodu, poszukiwany korepetytor

.michal 17 Wrz 2011 10:36 1187 4
  • #1 17 Wrz 2011 10:36
    .michal
    Poziom 13  

    Witam,
    Potrzebuje kogoś kto może poświęcić chwilę czasu i zechce wytłumaczyć mi kod, co się w nim dziej po kolei, wiedza moja nie jest duża jeżeli ktoś mógłby mi wskazać pewne dziedziny jakich on dotyczy reszty douczę się sam, może być na forum lub gg.

    Code:
    class A{
    
    protected: int i;
    public:
       A(){i=0;}
       A(int a){i=a}
       virtual int f() {return i;}
          int g(){return 2*i;}
    }

    class B:Public A{
    public:
       B(){i=1;}
       B(int a)=A(2*a){}
       virtual int f() {return 3;}
          int g(){return 2+i;}
    }

    classC: public B{
    public:
       C():B(3){}
       C(int a){}
       virtual int f() {return 4;}
          int g(){return i*i;}
    }

    A *x=newB(2), y=new C(3), *z=newA(5);
    cout<<x->f()<<" "<<y->g()<<" "<<(new B())->g()<<" " <<z-g()


    doszedłem co powinno się wypisać na ekran 3 2 3 10 ale chciałbym to zrozumieć
    Dodam że jest to dosyć pilne i jeżeli znalazłby się jakiś chętny korepetytor to możemy się w jakiś sposób dogadać;)

    0 4
  • Pomocny post
    #2 17 Wrz 2011 11:05
    markonedj
    Poziom 22  

    Tutaj nie jest potrzebny korepetytor, tylko przerobienie jakiegoś kurs C++ lub zajrzenie do Symfonii Grębosza i przeczytanie działu dziedziczenie. To co tu wkleiłeś to właśnie typowy przykład dziedziczenia w obiektowych językach programowania.

    Tak na szybko pierwszy link z google: http://pl.wikibooks.org/wiki/C++/Dziedziczenie
    I jeszcze coś na temat metod wirtualnych: http://pl.wikibooks.org/wiki/C++/Funkcje_wirtualne

    0
  • #3 17 Wrz 2011 11:19
    .michal
    Poziom 13  

    myślałem o tym żeby razem z kimś prześledzić cały proces wywoływania bo ja się gubię trochę, poczytam jeszcze trochę może będę miał konkretniejsze pytania ;)

    EDIT:
    nie bardzo umiem wytłumaczyć sobie skąd wzięło się 3 2 3 10, może zechce ktoś napisać jak powstają poszczególne wyniki albo chociaż dwa pierwsze 3 i 2??

    0
  • Pomocny post
    #4 17 Wrz 2011 17:41
    LED5W
    Poziom 32  

    .michal napisał:
    myślałem o tym żeby razem z kimś prześledzić cały proces wywoływania bo ja się gubię trochę
    Skompilowałeś ten kod w ogóle? M.in. nie masz tam średników zamykających definicje klas i gwiazdki przed y (przedostatnia linia).

    .michal napisał:
    nie bardzo umiem wytłumaczyć sobie skąd wzięło się 3 2 3 10, może zechce ktoś napisać jak powstają poszczególne wyniki albo chociaż dwa pierwsze 3 i 2??

    Kod: cpp
    Zaloguj się, aby zobaczyć kod
    Metoda f jest wirtualna więc podczas jej wywoływania sprawdzane jest na którą klasę rzeczywiście wskazuje wskaźnik A*. Tutaj jest to klasa B, więc wywołuje się B::f().
    Kod: select_listing
    Zaloguj się, aby zobaczyć kod
    Metoda g nie jest wirtualna więc to co się wykona zależy od typu wskaźnika. Ponieważ y jest wskaźnikiem A* wywołana zostanie metoda A::g().
    Więcej znajdziesz w linku podanym przez markonedj.

    0
  • #5 17 Wrz 2011 19:14
    .michal
    Poziom 13  

    dzięki za pomoc, rozumiem już co i jak w tym chodzi ;)

    0