Professional Documents
Culture Documents
Banja Luka
Programski jezici 1
2. dio
Goran Banjac
goran.banjac@etfbl.net
12/3/15
Klase 2. dio
Sadraj
class Time
{
public:
Time(int h=0,int m=0,int s=0)
{ hh=h; mm=m; ss=s; }
private:
int hh, mm, ss;
};
...
const Time podne(12);
const Time ponoc;
Za konstruktore i destruktore ne
moe da se koristi const!
Primjer:
class Time
{
public:
Time(int h=0,int m=0,int s=0)
{ hh=h; mm=m; ss=s; }
int getSat() const;
private:
int hh, mm, ss;
};
...
int Time::getSat() const
{ return hh; }
Inicijalizacija konstantnih
atributa ne moe da se vri u
tijelu konstruktora
korienjem operatora dodjele,
ve pomou inicijalizatora.
Primjer:
class Brojac
{
private:
int stanje;
const int korak;
public:
Brojac(int b, int k) : korak(k)
{ stanje = b; }
};
Pokaziva this
Pokaziva this
Primjer:
#include <iostream>
using namespace std;
x = 12
class Test
this->x = 12
{
(*this).x = 12
public:
arg x = 100
Test(int a=0) { x=a; };
clan x = 12
void print() const;
void maska(int) const;
private:
int x;
};
void Test::print() const
{
cout << "x = " << x << endl;
cout << "this->x = " << this->x << endl;
cout << "(*this).x = " << (*this).x << endl;
}
void Test::maska(int x) const
{
cout << "arg x = " << x << endl;
cout << "clan x = " << this->x << endl;
}
int main()
{ Test t(12); t.print(); t.maska(100); }
Pokaziva this
Primjer:
#include <iostream>
using namespace std;
class Time
{
public:
Time &setTime(int, int);
Time &setSat(int);
Time &setMin(int);
void print();
private:
int sat, min;
};
Time &Time::setTime(int h, int m)
{ setSat(h); setMin(m); return *this; }
Time &Time::setSat(int h)
{
sat = (h>=0 && h<24) ? h : 0;
return *this;
}
Time &Time::setMin(int m)
{
min = (m>=0 && m<60) ? m : 0;
return *this;
}
void Time::print()
{
cout << ( sat<10 ? "0":"" ) << sat;
cout << ":" ;
cout << ( min<10 ? "0":"" ) << min;
}
int main()
{
Time t;
t.setSat(18).setMin(5);
cout << "Vrijeme : "; t.print();
cout << "\nNovo vrijeme : ";
t.setTime(20,30).print();
}
Vrijeme : 18:05
Novo vrijeme : 20:30
Pokaziva this
Primjer:
a=1+i
|a|=1.41421
#include <iostream>
b=2
|b|=2
#include <cmath>
c=i
|c|=1
using namespace std;
d=3-4i |d|=5
class Complex;
double moduo(Complex);
class Complex
{
public: Complex(char s, double r=0, double i=0) : c(s), re(r), im(i) {};
double getRe() { return re; }
double getIm() { return im; }
void printComplex()
{
cout << c << "=";
if (re!=0) { cout << re; if (im>0) cout << "+"; }
if (im!=0) { if (im!=1) cout << im; cout << "i"; }
cout << "\t|" << c << "|=" << moduo(*this) << endl;
}
private: double re, im;
char c;
};
double moduo(Complex c)
{ return pow(pow(c.getRe(),2.0)+pow(c.getIm(),2.0),0.5); }
int main()
{
Complex a('a',1,1), b('b',2), c('c',0,1), d('d',3, -4);
a.printComplex(); b.printComplex(); c.printComplex(); d.printComplex();
}
Podatak lan u nekoj klasi moe da bude objekat (instanca neke klase).
Kad neki objekat ima neki drugi objekat kao atribut, govorimo o
kompoziciji.
Objekat moe da sadri jedan ili vie objekata drugih klasa (automobil
ima tokove, sjedita, volan, ...), tj. klasa moe da sadri vie podataka
lanova
koji su instance nekih drugih klasa.
Primjer:
class Datum
{
public:
Datum(int=1, int=1, int=2000);
~Datum();
private:
int dan, mjesec, godina;
};
class Osoba
{
public:
Osoba(char *, int, int, int);
~Osoba();
private:
char ime[15];
const Datum rodjen;
};
class Osoba
{
public:
Osoba(char *s, int d, int m, int g) :
rodjen(d,m,g)
{
int bs=0;
while ((ime[bs]=*(s+bs)) && bs<14) bs++;
if (bs==14) ime[bs]='\0';
cout <<"Kon. osobe : "<<ime<<endl;
}
void print() const
{
cout << ime << " je rodjen: ";
rodjen.print();
}
~Osoba()
{ cout << "Dest. osobe : "<<ime<<endl; }
private:
char ime[15];
const Datum rodjen;
};
int main()
{
Osoba otac ("Marko", 28,2,1975),
sin ("Janko", 29,2,2000),
pradeda("Slavko",29,2,1900);
otac.print(); sin.print(); pradeda.print();
}
Primjer:
class Klasa
{
...
static int a; // zajednicki clan
int b; // pojedinacni clan
...
};
// obavezna inicijalizacija statickog atributa
<< endl;
se: A
se: B
se: C