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