Z uporabo dedovanja iz obstoječih razredov tvorimo nove razrede.
Takšno tvorjenje razredov imenujemo izpeljava in razrede, ki tako nastanejo izpeljani razredi ali podrazredi. Izpeljani razred ima torej svoj nadrazred, tj. razred, iz katerega je izpeljan. Dedovanje je lahko enkratno ali večkratno – v tem primeru je razred izpeljan iz dveh ali več nadrazredov.
Izpeljani razred podeduje vse elemente svojega nadrazreda. K tem elementom pa lahko doda še svoje elemente (podatke in metode) inponovno definira metode iz svojega nadrazreda. Zato lahko izpeljane razrede razumemo kot posebne primere svojih nadrazredov. Tako izpeljani razredi predstavljajo specializacijo, nadrazredi pa posplošitev.
Ker izpeljani razred podeduje vse elemente svojega nadrazreda, je objekt izpeljanega razreda hkrati tudi objekt nadrazreda. Obratno pa ne velja, kajti objektu nadrazreda manjkajo podatki in metode, ki so definirani v izpeljanem razredu.
Razred student predstavlja sprecializacijo razreda oseba.
K podatkom o določeni osebi bomo torej dodali podatke,ki določajo, da je ta oseba pravzaprav študent. Zaradi enostavnosti smo izbrali podatek "smer", ki predstavlja smer študija posameznega študenta.
#include <iostream.h>
enum spol {moski, zenski};
class oseba
{
public:
oseba(char im[], char p[], spol s, char dat_r[]);
oseba() {};
void Vpisi();
void Izpisi();
private:
char ime[15];
char priimek[15];
spol spol_o;
char datum_r[10];
};
class student : public oseba
{
public:
void Vpisi();
void Izpisi();
private:
char smer[20];
};
oseba :: oseba(char im[], char p[], spol s, char dat_r[])
{
for (int i=0; i<15; i++)
ime[i] = im[i];
for (i=0; i<15; i++)
priimek[i] = p[i];
spol_o = s;
for (i=0; i<10; i++)
datum_r[i] = dat_r[i];
}
void oseba :: Vpisi()
{
int sp;
cout << endl;
cout << " Vpisi ime: ";
cin >> ime;
cout << " Vpisi priimek: ";
cin >> priimek;
cout << " Vpisi spol 1 - zenski, 2 - moski: ";
cin >> sp;
if (sp == 1)
spol_o = zenski;
else
spol_o = moski;
cout << " Vpisi datum rojstva: ";
cin >> datum_r;
}
void student :: Vpisi()
{
cout << " Vpisi smer: ";
cin >> smer;
}
void oseba :: Izpisi()
{
cout << endl << " Ime: " << ime;
cout << endl << " Priimek: " << priimek;
if (spol_o == zenski)
cout << endl << " Spol: Zenski";
else
cout << endl << " Spol: Moski";
cout << endl << " Datum rojstva: " << datum_r << endl;
}
void student :: Izpisi()
{
cout << " Smer: " << smer << endl;
}
int main()
{
student luka;
luka.oseba::Vpisi();
luka.Vpisi();
luka.oseba::Izpisi();
luka.Izpisi();
return 0;
}
Kateri operator uporabljamo za dostop do metod ali podatkov v objektih, ki so dinamično generirani?
Kaj je konstruktor?
Konstruktor mora imeti enako ime kot razred.
Katere vrste konstruktorjev poznamo?
Namig: Odkljukati je potrebno 3 alineje
Kaj je destruktor?
Katere funkcije lahko dostopajo do privatnih metod ali podatkov razreda, čeprav niso člani razreda?
Dedovanje je lahko ali .
Dedovanje je lahko ali .
Kaj je dedovanje razredov?
Pri dedovanju ima vsak izpeljani razred svoj .
Pri dedovanju ima vsak izpeljani razred svoj .
Izpeljani razred podeduje vse elemente svojega nadrazreda.
Ali je objekt nadrazreda tudi objekt podrazreda?
Poleg javnih in privatnih elementov lahko v razredih definiramo tudi zaščitene elemente z določilom .
Poleg javnih in privatnih elementov lahko v razredih definiramo tudi zaščitene elemente z določilom .
in sta dve najpomembnejši lastnosti objektnega programiranja.
in sta dve najpomembnejši lastnosti objektnega programiranja.
Kaj je polimorfizem?
Kako omogočimo polimorfno redefinicijo?
Kaj je abstrakten razred?
Ali lahko naredimo primerek abstraktnega razreda?
Pri večkratnem dedovanju se podatki podvajajo. Včasih je to potrebno, v večini primerov pa se želimo nepotrebnemu podvajanju podatkov izogniti. V ta namen lahko definiramo nadrazrede.
Pri večkratnem dedovanju se podatki podvajajo. Včasih je to potrebno, v večini primerov pa se želimo nepotrebnemu podvajanju podatkov izogniti. V ta namen lahko definiramo nadrazrede.
Kaj pomeni prekrivanje metod?
Kaj omogoča polimorfizem?
Namig: Odkljukati je potrebno 3 alineje
Katere ključne besede dostopnosti uporabljamo pri definiciji razreda?
Namig: Odkljukati je potrebno 3 alineje
Kaj velja za spodnjo definicjo razreda:
class student : public oseba
{
public:
void Vpisi();
void Izpisi();
private:
char smer[20];
};
Namig: Odkljukati je potrebno 4 alineje
Kaj so konstantni objekti?