Professional Documents
Culture Documents
C++ Klase 1
C++ Klase 1
C++ Klase 1
Banja Luka
Programski jezici 1
1. dio
Goran Banjac
goran.banjac@etfbl.net
12/3/15
Klase 1. dio
Sadraj
Proceduralno (algoritamski)
orijentisano
Programeri se koncentriu na
pisanje funkcija, funkcije se
grupiu u program
Objektno orijentisano
Jedinica programiranja
KLASA
Programeri se koncentriu
na kreiranje vlastitih
tipova podataka KLASE
Imenice su te koje
odreuju sistem (imenice
odreuju klase)
Svaka klasa sadri
podatke i funkcije za
Definisanje klase
Opti oblik definicije
klase
KLASA se definie
korienjem kljune
rijei class.
class Ime
{
Uobiajeno naziv
klase zapoinje
velikim slovom.
tip clan;
public:
tip clan;
private:
tip clan;
};
Funkcije lanice
najee su javni
lanovi klase
private:
int brojilac;
int imenilac;
};
private
Specifikatori pristupa:
mogu da mijenjaju mjesta,
mogu vie puta da se navode,
ako se izostavi, podrazumijeva se
private.
Deklaracija klase
podrazumijeva da se samo
naznai (deklarie) da neki
identifikator predstavlja klasu.
class Ime;
class Counter
{
private:
int count;
public:
...
void print();
...
};
void Counter::print()
{
cout << count;
}
objekta - objekat.clanica
#include <iostream>
using namespace std;
class Counter
{
public:
int x;
void print() { cout << x << endl; }
};
int main()
{
Counter c;
Counter *pc = &c;
Counter &uc = c;
7
8
10
c.x = 7;
c.print();
uc.x = 8;
uc.print();
pc->x = 10;
pc->print();
Lokalno x: 1
Atribut x: 100
Globalno x: 0
h, int m, int s)
< 24 ) ? h : 0;
< 60 ) ? m : 0;
< 60 ) ? s : 0;
void Time::printM()
{
cout << (sat<10?"0":"") << sat << ":";
cout << (min<10?"0":"") << min;
}
void Time::printS()
{
cout << ((sat==12)?12:sat%12 ) << ":";
cout << (min<10 ? "0":"") << min << ":";
cout << (sek<10 ? "0":"") << sek;
cout << (sat<12 ? " AM" : " PM" );
}
int main()
{
Time t;
t.setTime(13,27,6);
cout << "Vrijeme : ";
t.printM(); cout<<" ili "; t.printS();
t.setTime(99,99,99);
cout << "\nPokusaj : ";
t.printM(); cout<<" ili "; t.printS();
}
Vrijeme : 13:27 ili 1:27:06 PM
Pokusaj : 00:00 ili 0:00:00 AM
Primjer:
class Banka
{
private:
float stanje;
public:
...
void setStanje(float ns)
{ stanje = ns; }
float getStanje()
{ return stanje; }
...
};
...
Banka racun;
racun.setStanje(0);
cout << racun.getStanje();
Ako neka funkcija slui kao pomona funkcija (helper ili utility
function) u klasi, tako da npr. neto rauna ili slino za neku drugu
funkciju lanicu klase, tada takvu pomonu funkciju ostavljamo kao
privatnu.
Modularizacija
U realizaciji veih programa preporuljivo je modularizovati kod.
Pri tome interfejs klase treba odvojiti od implementacije.
time.h (interfejs)
primjer.cpp (implementacija)
#ifndef TIME_H
#define TIME_H
#include <iostream>
#include "time.h"
using namespace std;
class Time
{
public:
void setTime(int, int, int);
void printM();
void printS();
private:
int sat, min, sek;
};
#endif
projekat.cpp (glavni program)
#include <iostream>
#include "time.h"
int main()
{
Time t; ...
}
void Time::setTime(int
{
sat = ( h >= 0 && h
min = ( m >= 0 && m
sek = ( s >= 0 && s
}
h, int m, int s)
< 24 ) ? h : 0;
< 60 ) ? m : 0;
< 60 ) ? s : 0;
void Time::printM()
{
cout << (sat<10?"0":"") << sat << ":";
cout << (min<10?"0":"") << min;
}
void Time::printS()
{
cout << ((sat==12)?12:sat%12 ) << ":";
cout << (min<10 ? "0":"") << min << ":";
cout << (sek<10 ? "0":"") << sek;
cout << (sat<12 ? " AM" : " PM" );
}
class Time
{
private:
int hh, mm, ss;
public:
Time(int h, int m, int s)
{
hh=h; mm=m; ss=s;
}
};
DESTRUKTORI
Konstruktor se poziva prije bilo koje funkcije (i prije main funkcije) tj.
prije poetka izvravanja programa. (u sluaju vie fajlova, redoslijed
izvravanja konstruktora nije unaprijed poznat!)
Za statike objekte:
int main()
{
cout <<" (ulaz u main)<< endl;
KD kd2(2);
cout <<" (main: lokalni)<<endl;
static KD kd3(3);
cout <<" (main: staticki)<<endl;
create();
KD kd4(4);
cout <<" (main: lokalni)<<endl;
cout <<"Izlaz iz programa<<endl;
}
Konst 1 (ulaz u main)
Konst 2 (main: lokalni)
Konst 3 (main: staticki)
Konst 5 (create lokalni)
Konst 6 (create staticki)
Konst 7 (create lokalni)
Dest 7
Dest 5
Konst 4 (main: lokalni)
Izlaz iz programa
Dest 4
Dest 2
Dest 6
Dest 3
Dest 1
string
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int main()
{
string str1("Banja Luka"), str2;
cout << str1 << endl;
cout << " size: " << str1.size() << endl;
cout << " length: " << str1.length()
<< endl;
cout << " max_size: "
<< str1.max_size() << endl;
str1.replace(1, 4, ".");
cout << "Nakon zamjene: " << str1 << endl;
str1.insert(4, ".");
str1.erase(5, 3);
cout << "Novi string: " << str1 << endl;
cout << "Podstring: " << str2.substr(6, 4);
char *p = new char[str2.size() + 1];
strcpy(p, str2.c_str());
cout << endl << "c_str: " << p;
delete [] p;
return 0;
}
Banja Luka
size: 10
length: 10
max_size: 1073741820
Unesite string: Doboj
Unijeli ste: Doboj
Novi string: Banja Luka
Stringovi su jednaki
Znak(6): L
Nakon zamjene: B. Luka
Novi string: B. L.
Podstring: Luka
c_str: Banja Luka