Professional Documents
Culture Documents
OOP C++ 6 Nasljeđivanje 2018
OOP C++ 6 Nasljeđivanje 2018
Osnovne teme
nasljeđivanje
zaštićeni pristupi i kako se koriste
polimorfizam
Objektno-orijentirano programiranje
u programskom jeziku C++
3.12.2018. 1 3.12.2018. 2
Što podrazumijevamo pod izjavom: klasa Kada se nasljeđuje klasa, nasljeđuju se sve njene dostupne funkcije i
A je vrsta klase B?
podatkovni članovi bez obzira hoće li ih izvedena klasa koristiti:
Podrazumijevamo da je klasa A
protected/public članovi bazne klase su dostupni izvedenoj klasi
specifikacija klase B
Npr. klasa Pas u definiciju Sisavca dodaje private članovi nisu dostupni izvedenoj klasi.
nova svojstva (lajanje, mahanje repom)
3.12.2018. 4
Apstraktna klasa:
Bazna klasa koja nema instance
nema implementaciju
3.12.2018. 6
3.12.2018. 9 3.12.2018. 10
3.12.2018. 11 3.12.2018. 12
Pozivanje baznog oblika nadjačane funkcije Primjer: Pozivanje baznog oblika nadjačane funkcije
#include <iostream> using imespace std;
Funkcija nadklase nakon što je nadjačana u podklasi, može se pozvati
prema originalnoj definiciji u nadklasi. class Sisavac{
Sintaksa: public:
void Pomak() const { cout << “Sisavac se pomakao 1 korak\n”; }
Nadklasa::funkcija. void Pomak(int udaljenost) const {
cout << “Sisavac se pomakao “ << udaljenost << “ koraka \n.” ; int main() {
} Sisavac sis;
Pas Fido;
};
Primjer: Sisavac::Pomak().
sis.Pomak(2);
class Pas : public Sisavac {
Fido.Pomak();
public: Fido.Pomak(6);
void Pomak() const { cout << “Pomak u Psu...\n”; } return 0;
void Pomak( int a) const { Sisavac::Pomak(a); } }
};
Primjer: Virtualne funkcije Primjer: Virtualne funkcije- pokazivača nad različitim objektima podklasa.
#include <iostream> using std::cout;
#include <iostream> using namespace std; Pokazivača na klasu Sisavac pozvan je nad različitim
class Sisavac { objektima podklasa.
class Sisavac {
public: Pozivaju se odgovarajuće funkcije nadjačane u
public:
Sisavac():iGod(1) { cout << “Sisavac konstruktor...\n”; } podklasama.
Sisavac():iGod(1) { } void main() {
virtual ~Sisavac() { cout << “Sisavac destruktor...\n”; } int main() { virtual ~Sisavac() { } Sisavac *pMam ;
void Pomak() const { cout << “Sisavac se pomakao\n”; } Sisavac *pMam = new Pas; void Pomak() const { cout << “Sisavac se pomakao\n”; } pMam = new Pas;
virtual void GlasaSe() const { cout << “Sisavac se glasa!\n”; } pMam ->Pomak(); virtual void GlasaSe() const { cout << “Sisavac se glasa!\n”; } pMam ->Pomak();
protected: pMam ->GlasaSe(); protected: pMam ->GlasaSe();
int iGod; delete pMam; int iGod; pMam = new Macka;
}; return 0; }; pMam ->Pomak();
class Pas : public Sisavac { } class Pas : public Sisavac { pMam ->GlasaSe();
public:
public: delete pMam;
Pas() { cout << “Pas konstruktor...\n”; }
void GlasaSe()const { cout << “Vau! Vau!\n”; } }
virtual ~Pas() { cout << “Pas destruktor...\n”; }
};
void lovackiPas() { cout << “Ovo je lovački pas...\n”; }
class Macka : public Sisavac {
void GlasaSe() const { cout << “Vau! Vau!\n”; }
public:
void Pomak() const { cout << “Pas se pomakao 5 koraka.\n”; }
void GlasaSe( )const { cout << “Miau! Miau!\n”; }
};
};
1. poziv
Konstruktor Sisavac
Kreiranje objekta Pas
2. poziv
Konstruktor Pas
Sažetak
3.12.2018. 41