Professional Documents
Culture Documents
#include <iostream>
using namespace std;
class Riba{
public:
void plivanje(){cout<<"Riba pliva!"<<endl;}
};
int main(){
Tuna mojDorucak;
mojDorucak.plivanje();
naterajRibuDaPliva(mojDorucak);
char a;
cin>>a;
return 0;
}
Izlaz:
Tuna pliva!
Riba pliva!
Funkciji naterajRibuDaPliva(Riba&) je svejedno da li je objekart tipa Tuna I rukuje njime kao sa objektom
tipa Riba I poziva metod Riba::plivanje().
Korisnik ocekuje da se objekat tipa Tuna ponasa kao tuna, cak I ako je pozvan metod Riba::plivanje(). To
je polimorfno ponasanje u kojem objekat poznatog tipa klase Riba moze da se ponasa kao svoj aktuelni
tip. Konkretno, izvedena klasa Tuna, moze da bude implementirana ako funkciju Riba::plivanje() ucinite
virtuelnom.
Primer2:
#include <iostream>
using namespace std;
class Riba{
public:
virtual void plivanje(){cout<<"Riba pliva!"<<endl;}
};
int main(){
Tuna mojDorucak;
Saran mojRucak;
naterajRibuDaPliva(mojDorucak);
naterajRibuDaPliva(mojRucak);
char a;
cin>>a;
return 0;
}
Ispis:
Tuna pliva!
Saran pliva!
Funkcija Riba::plivanje() se nije uopste pozvala, jer je proglasena virtuelnom, pa njene promenjene
varijante Tuna::plivanje() I Saran::plivanje() imaju prioritet.
Cak I bez znanja tacnog tipa ribe kojom se rukuje implementacija funkcije naterajRibuDaPliva() moze da
rezultira razlicitim implementacijama metoda plivanje(), definisanim u razlicitim izvedenim klasama koje
su pozvane, uzimajuci u obzir samo instance osnovne klase.
Primer3:
#include <iostream>
using namespace std;
class Poligon{
protected:
int sirina, visina;
public:
void postaviti_vrednost(int a, int b){
sirina = a;
visina = b;
}
virtual int povrsina(){
return 0;
}
};
void main(){
Pravougaonik p;
Trougao t;
Poligon poly;
Poligon *poly1 = &p;
Poligon *poly2 = &t;
Poligon *poly3 = &poly;
char x;
cin>>x;
}
Ispis:
20
10