You are on page 1of 3

Primer1:

#include <iostream>
using namespace std;

class Riba{
public:
void plivanje(){cout<<"Riba pliva!"<<endl;}
};

class Tuna : public Riba{


public:
void plivanje(){cout<<"Tuna pliva!"<<endl;}
};

void naterajRibuDaPliva(Riba& r){


r.plivanje();
}

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;}
};

class Tuna : public Riba{


public:
void plivanje(){cout<<"Tuna pliva!"<<endl;}
};

class Saran : public Riba{


public:
void plivanje(){cout<<"Saran pliva!"<<endl;}
};

void naterajRibuDaPliva(Riba& r){


r.plivanje();
}

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;
}
};

class Pravougaonik : public Poligon{


public:
int povrsina(){
return sirina*visina;
}
};

class Trougao : public Poligon{


public:
int povrsina(){
return (sirina*visina)/2;
}
};

void main(){
Pravougaonik p;
Trougao t;
Poligon poly;
Poligon *poly1 = &p;
Poligon *poly2 = &t;
Poligon *poly3 = &poly;

poly1 -> postaviti_vrednost(4,5);


poly2 -> postaviti_vrednost(4,5);
poly3 -> postaviti_vrednost(4,5);

cout << poly1 -> povrsina() << endl;


cout << poly2 -> povrsina() << endl;
cout << poly3 -> povrsina() << endl;

char x;
cin>>x;
}

Ispis:

20

10

You might also like