Cau chtel bych se zeptat jestli nekdo nema prikladek na dedicnost. Diky
Fórum › C / C++
Dedicnost
Dedicnost a polymorfizmus v priklade:
#include "iostream"
using namespace std;
/*! od tejto triedy budu dedene vsetky ostatne triedy
* akonahle pridas do tejto triedy nejaku fciu,
* mozu ju pouzivat aj dedene triedy
*/
class Zviera
{
public:
/*! Konstruktor */
Zviera() {
cout << "bolo vytvorene zviera" << endl;
}
/*! Tato funkcia je spolocna pre
* vsetky dedene triedy
*/
void spolocnaFcia() {
cout << "toto je spolocna funkcia" << endl;
}
/*! Abstraktna funkcia, neobsahuje telo a
* musi bit implementovana v potomkoch
*/
virtual void menoZvierata() = 0
};
/*! Trieda dedena od triedy zviera.
* v tejto triede je implementovana
* virtualna funkcia menoZvierata()
*/
class Mackovite : public Zviera
{
public:
/*! Tento konstruktor najpr zavola konstruktor
* triedy od ktorej je dedena
*/
Mackovite() : Zviera()
{
cout << "bolo vytvorena trieda Mackovite" << endl;
}
virtual void menoZvierata() {
cout << "zviera je celade mackovitej" << endl;
}
};
/*! Tato trieda dedi od triedy mackovite,
* cize ma vsetko co ma trieda mackovite,
* a jej predok trieda Zviera.Dalej je v tejto
* triede nova implementacia menoZvierata()
*/
class Lev : public Mackovite {
public:
Lev() : Mackovite() {
cout << "bola vytvorena trieda Lev" << endl;
}
virtual void menoZvierata() {
cout << "zviera je Lev" << endl;
Mackovite::menoZvierata();
}
};
/*! To iste co vyzsie menovana trieda */
class Macka : public Mackovite {
public:
Macka() : Mackovite() {
cout << "bola vytvorena trieda Macka" << endl;
}
virtual void menoZvierata() {
cout << "zviera je Macka" << endl;
Mackovite::menoZvierata();
}
}
void zobrazZviera(Zviera* z) {
z->spolocnaFcia();
z->menoZvierata();
}
int main()
{
Zviera* zv1 = new Lev();
Zviera* zv2 = new Macka();
zobrazZviera(zv1);
zobrazZviera(zv2);
delete zv1;
delete zv2;
return 0;
}
Nejak jsem to z toho nepochpil potreboval bych pomoct s timto prikladem:
//trida osoba- meno, prijmeni- retazec pohlavi a rodne cislo 6 cisel
//konstruktor s parametry, bez parametru, kopirovaci, prirazovaci operator, destruktor,
//metod typu set -nastavovat, get vracat
To Jumper: Hmm, to jsi mel naspat hned. Tim by jsi usetril sn3d tech par minut casu, kterou tomu venoval. Krome toho sis asi spletl i pojmy.
Pisu to z hlavy:
class COsoba{
char * mJmeno, *mPrijmeni;
bool mJeMuz;
int mRC[6];
public:
COsoba(): mJmeno(0),mPrijmeni(0), mJeMuz(true) {} // ctor bez prametru(vychozi)
COsoba(const char* jmeno, const char*prijemni, bool muz,const int RC[6]): // ctor s parametry
{
mJmeno = strdup(jmeno);
mPrijmeni = strdup(prijmeni);
mJeMuz = muz;
memcpy(mRC, RC, sizeof(int)*6);
}
COsoba(const COsoba& obj) // cpy - ctor
{
mJmeno = strdup(obj.mJmeno);
mPrijmeni = strdup(obj.mPrijmeni);
mJeMuz = obj.mJeMuz;
memcpy(mRC, obj.mRC, sizeof(int)*6);
}
~COsoba() // dctor
{
if(mJmeno) free((void*)mJmeno);
if(mPrijemni) free((void*)mPrijmeni);
}
COsoba& operator=(const COsoba& obj) // operator prirazeni
{
if(&obj != this){
if(mJmeno) free((void*) mJmeno);
if(mPrijemi) free((void*) mPrijmeni);
mJmeno = strdup(obj.mJmeno);
mPrijmeni = strdup(obj.mPrijmeni);
mJeMuz = obj.mJeMuz;
memcpy(mRC, obj.mRC, sizeof(int)*6);
}
return *this;
}
// set metody
void NastavJmeno(const char* jmeno) { if(mJmeno) free((void*)mJmeno); mJmeno = strdup(jmeno);}
void NastavPrijmeni(const char* prijmeni) { if(mPrijmeni) free((void*)mPrijmeni); mJmeno = strdup(prijmeni);}
void NastavPohlavi(bool muz) { mJeMuz = muz;}
void NastavRC(const int RC[6]) {memcpy(mRC, RC, sizeof(int)*6);}
// get metody
inline const char* DejJmeno() const { return mJmeno;}
inline const char* DejPrijemni() const {return mPrijmeni;}
inline bool DejPohlavi() const {return mJeMuz;}
inline const int* DejRC() const {return mRC;}
};
Mozna jsou tam chyby, psal jsem to z hlavy. a mozna by nebylo od veci, kdyby sis tam udelal metodu,ktera by cistila pamet, protoze v kodu mam porad dokola if(mJmeno) ... if(mPrijmeni).
Zjistit počet nových příspěvků
Přidej příspěvek
Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 2 hosté
Podobná vlákna
Dedicnost ... — založil Koudis
Moderátoři diskuze