Úvod do objektov

Definujte triedu Zlomok, ktorá bude mať: 2 public atribúty citatel a menovatel (typu int) a metódu vypis(), ktorá vypíše na štandardný výstup hodnoty atribútov v tvare "citatel / menovatel". Vo funkcii main() vytvorte inštanciu triedy Zlomok, inicializujte hodnoty citatel, menovatel a zavolajte metódu vypis().
#include <iostream.h>

class Zlomok
{
public :
int citatel; //atribut
int menovatel;

void vypis() { //metoda
cout << this -> citatel << "/" << this -> menovatel ;
}
};


int main(int argc, char * argv[] ){
Zlomok z; // objekt z typu Zlomok
z.citatel = 1; // pristup k atribútom a k metodam cez bodku
z.menovatel = 2;
z.vypis();

Zlomok *pz = new Zlomok; // dynamicky pristup
pz->citatel = 1; // pristup k atribútom a k metodam cez operator ->
pz->menovatel = 2;
pz->vypis();
return 0;
}



Príklad 3.2 Atribúty triedy Zlomok deklarujte v private sekcii triedy. V triede Zlomok ďalej definujte: bezparametrický, parametrický, "copy" konštruktor a deštruktor, ktoré budú vypisovať informáciu o činnosti na štandardný výstup. Vyskúšajte ich správnu činnosť vo funkcii main().

#include <iostream>
using namespace std;

class Zlomok
{
private:
int citatel;
int menovatel;

protected:
public :

Zlomok( int cit, int men ){ // Konštruktor parametricky
cout << "Konstruktor Zlomok (" << cit << "," << men << ")" << endl;
this -> citatel = cit;
this -> menovatel = men;
}
Zlomok(){ // Konštruktor bezparametricky
this -> citatel = 0;
this -> menovatel = 1;
cout << "Konstruktor Zlomok (" << this -> citatel << "," << this -> menovatel << ")" << endl;
}


~Zlomok(){ // Deštruktor
cout << "Destruktor zlomku " << citatel << "/" << menovatel << endl;
}

void vypis() {
cout << this -> citatel << "/" << this -> menovatel << endl;
}

// get /set metody
int getCitatel(){
return this -> citatel;
}

void setCitatel( int _citatel) {
this -> citatel = _citatel;
}

int getMenovatel(){
return this -> menovatel;
}

void setMenovatel(int _menovatel){
if ( _menovatel == 0) {
cout << " Do menovatela nie je mozne priradit nulu !";
this->menovatel = 1;
}
else
this -> menovatel = _menovatel;
}

Zlomok(const Zlomok & zzz ){ // COPY konstruktor
this-> menovatel = zzz.menovatel;
this -> citatel = zzz.citatel;
cout << "Copy konstruktor pre "<< this->citatel << "/" << this->menovatel << endl;
}
};

int main(int argc, char * argv[] )
{
Zlomok z; // vola bezparametricky konstruktor

Zlomok z1(1,2); // vola parametricky konstruktor 1/2
z1.vypis();
z1.setCitatel(5); // pristup k atributom v sekcii private cez clenske metody

// dynamicky
Zlomok *pz;
pz = new Zlomok(3,4); // vola parametricky konstruktor 3/4
pz -> vypis(); // ekvivalent (*pz).vypis();

delete pz; // vola destruktor 3/4

Zlomok *pz1 = new Zlomok(z1); // vola "copy" konstruktor pre zlomok 5/2
pz1->vypis();
delete pz1; // vola destruktor kopie zlomku 5/2
} //vola destruktor zlomku 5/2 a zlomku 0/1
Definujte triedu Osoba, ktorá bude obsahovať 3 atribúty: vek (int), plat (float) a meno (char*). Definujte parametrický konštruktor, "copy" konštruktor, deštruktor a metódu výpis(). Ďalej definujte globálnu funkciu, ktorej vstupným parametrom bude objekt typu Osoba, návratový typ funkcie bude void a funkcia bude volať členskú metódu triedy Osoba vypis().


#include <iostream>
#include <string>
using namespace std;

class osoba
{
private:
int vek;
float plat;
char *meno; //atributy

protected:
public :

osoba(char *meno, int vek) { //inline parametricky konstruktor
this->plat = 0;
this->vek = vek;
this->meno = new char[strlen(meno) +1];
strcpy(this->meno, meno);
}

void vypis() { //metoda
cout << "Zamestanec " <<this -> meno << " vek "<< this->vek<<endl ;
cout << "Vyska platu " << this->plat<< endl;
}

void zvys_plat(float hodnota){ //metoda
this->plat += hodnota ;
}

~osoba(){ // destruktor
delete[] this->meno;
}

osoba(osoba& clovek){ //copy konstruktor
this->plat = clovek.plat;
this->vek = clovek.vek;
char* ret=new char[strlen(clovek.meno)+5];
strcpy(ret, clovek.meno);
strcat(ret, "COPY");
this->meno = new char[strlen(ret) +1];
strcpy(this->meno,ret);
}
string GetMeno(){ // pristupova metoda
return this->meno;
}
};

void funkcia(osoba x) // globalna funkcia, parameter hodnotou
{
x.vypis();
}

main()
{
osoba X("Katka", 20);
X.vypis(); // Katka 20

osoba *pX;
pX = new osoba(X);
pX->zvys_plat(15000);
pX->vypis(); // KatkaCOPY

delete pX;

osoba Y("Karol",30);
Y.vypis(); // Karol 30

funkcia(Y); // KarolCOPY

return 0;
}