programiranje2 vezbi klasi objekti

17
ПРОГРАМИРАЊЕ 2 ВЕЖБИ: КЛАСИ И ОБЈЕКТИ Асистент: Невена Ристова

Upload: goran-todoroski

Post on 25-Oct-2015

97 views

Category:

Documents


6 download

DESCRIPTION

Programiranje vezbi PPT

TRANSCRIPT

Page 1: Programiranje2 Vezbi Klasi Objekti

ПРОГРАМИРАЊЕ 2: ВЕЖБИ КЛАСИИОБЈЕКТИ

Асистент: Невена Ристова

Page 2: Programiranje2 Vezbi Klasi Objekti

Класи во C++ Класата e основeн концепт на објектно-

ориентираното програмирање и основната единица на енкапсулација во С++.

Класа е множество на објекти кои делат(поседуваат) заедничко однесување и структура.

Објектите се инстанци (појави) на дадени класи. Објектите поседуваат две карактеристики:

атрибути(податоци) однесување-својства(функции и методи).

Програмирање 2 - Вежби

Page 3: Programiranje2 Vezbi Klasi Objekti

Класи во C++

Класите се дефинираат со клучниот збор class. Синтаксата на класната декларација е слична на онаа кај структурите.

class име_на_класа{private: //опционално

приватни променливи и методиpublic: јавни променливи и методи} ;

Програмирање 2 - Вежби

Page 4: Programiranje2 Vezbi Klasi Objekti

Атрибути и методи Атрибутите и методите кои се наоѓаат внатре во

класата се нарекуваат членови на класата. Членовите на класата, доколку не е поинаку

специфицирано, се приватни. За да членовите бидат јавни и со тоа достапни и

од надвор од класата, тогаш треба пред нивното декларирање да стои клучниот збор public:

Јавните членови се достапни како за другите членови на класата, така и од било кој друг дел од програмот.

Програмирање 2 - Вежби

Page 5: Programiranje2 Vezbi Klasi Objekti

Пример за декларација на класа

class primer_klasa{//приватни членовиint a;public: //јавни членовиvoid set_a(int num);int get_a();

};Функциите кои се декларирани како членови на некоја класа се викаат функции членови или методи.

Програмирање 2 - Вежби

Page 6: Programiranje2 Vezbi Klasi Objekti

Дефинирање на методи Иако метдите set_a(int num) и get_a() се

декларирани, тие се уште не се дефинирани Методите мора да се декларирани внатре во

класата, со нивните дефиниции направени надвор од калсата.

За да се дефинира метод, мора да се поврзе името на методот со името на класата преку операторот за дофат (scope resolution operator) ::

тип_на_метод име_класа::име_функција(листа_параметри) {//тело_на_методот}

Програмирање 2 - Вежби

Page 7: Programiranje2 Vezbi Klasi Objekti

Дефинирање на методи

void primer_klasa::set_a(int num) {a=num;

}

int primer_klasa::get_a() {return a;

}

set_a() и get_a() имаат пристап до променливата а, која е приватна променлива (атрибут) на primer_klasa.

Програмирање 2 - Вежби

Page 8: Programiranje2 Vezbi Klasi Objekti

Дефинирање на методи Методите set_a() и get_a() имаат посебна улога

на посредник (interface) за пристап до приватната променливата а.

До неа немаат пристап функции и објекти надвор од класата primer_klasa.

До променливата а може да се пристапи само преку користење на set_a() и get_a(), кои се јавни (public) методи.

На тој начин се реализира принципот на енкапсулација

Програмирање 2 - Вежби

Page 9: Programiranje2 Vezbi Klasi Objekti

Декларирање на објекти primer_klasa ob1, ob2; Декларацијата на класата е логичка апстракција

која дефинира нов тип на податоци (ADT). Декларацијата на објекти креира објекти од

даден тип (класа). Дефинирањето на објектите се извршува во тело

на метод, кој може да биде надворешен (на пр. main) или метод во рамки на друга класа.

Програмирање 2 - Вежби

Page 10: Programiranje2 Vezbi Klasi Objekti

Декларирање на објекти По креирање на објект од некоја класа, може да

се пристапува до неговите јавни членови (атрибути и методи), слично како што се пристапува до елементи на структура.

Пример: повикување на set_a() и get_a() за објектите ob1, ob2:

ob1.set_a(10);ob2.set_a(99);cout << ob1.get_a() << endl;cout << ob2.get_a() << endl;

Излез (output): 10 и 99.

Програмирање 2 - Вежби

Page 11: Programiranje2 Vezbi Klasi Objekti

Пример код со грешка

main(){

primer_klasa ob1, ob2;ob1.a=10; //грешка: директен пристап кон приватен

член ob2.a=99; //грешка: директен пристап кон приватен член //пристап кон јавни членови cout << ob1.get_a() << ”\n”;cout << ob2.get_a() << ”\n”;

}

Програмирање 2 - Вежби

Page 12: Programiranje2 Vezbi Klasi Objekti

Корегиран код

main(){

primer_klasa ob1, ob2;ob1.set_a(10); //пристап кон јавен метод ob2.set_a(99); //пристап кон јавен метод //пристап кон јавни членови cout << ob1.get_a() << ”\n”;cout << ob2.get_a() << ”\n”;

}

Програмирање 2 - Вежби

Page 13: Programiranje2 Vezbi Klasi Objekti

Целосен пример#include <iostream>

using namespace std;

class primer_klasa

{

int a; //private

public:

void set_a(int num);

int get_a();

};

void primer_klasa ::set_a(int num)

{

a=num;

}

int primer_klasa::get_a()

{

return a;

}

Програмирање 2 - Вежби

main(){

primer_klasa ob1, ob2;

ob1.set_a(10);ob2.set_a(99);

cout << ob1.get_a() << ”\n”;cout << ob2.get_a() << ”\n”;

}

Page 14: Programiranje2 Vezbi Klasi Objekti

Објекти

Кодот надвор од класата пристапува до приватните членови само преку јавните членови на класата, поврзувајки го името на објектот со името на методот кој го повикуваат (пр. ob1.set_a(10);)

Секој креиран објект од одредена класа има своја сопствена копија од секоја променлива член.

Програмирање 2 - Вежби

Page 15: Programiranje2 Vezbi Klasi Objekti

Јавни променливи членови на класа Една класа може да има и членови јавни променливиclass primer_klasa

{//а е јавна променлива

public:

int a;//нема потреба од методи за пристап на а (public)

};

main(){

primer_klasa ob1, ob2;

ob1.a=10; //на а се пристапува директно

ob2.a=99; //бидејќи е јавна променлива

cout << ob1.a << ”\n”;

cout << ob2.a << ”\n”;

}

Се нарушува принципот на енкапсулација!Програмирање 2 - Вежби

Page 16: Programiranje2 Vezbi Klasi Objekti

Inline дефинирање на методиclass Pixel {

private:

int x, y;

public: //inline дефинирани методи

int getx() {

return x;

}

int gety() {

return y;

}

void set (){

cout << ”x=”; cin >> x;

cout << ”y=”; cin >> y;

}

void draw_pixel() {

cout << ”(x,y)=” << x << ”,” << y; << endl;

}

};

Програмирање 2 - Вежби

Page 17: Programiranje2 Vezbi Klasi Objekti

Дефинирање на методи Сите inline дефинирани членки методи на класата Pixel

на следниот начин би се дефинирале посебно (претходно треба да имаат соодветни декларации во класата):

int Pixel :: getx() {

return x;

}

int Pixel :: gety() {

return y;

}

void Pixel :: set() {

cout << ”x=”; cin >> x;

cout << ”y=”; cin >> y;

}

void Pixel :: draw_pixel(){

cout << ”(x,y)=” << x << ”,” << y; << endl;

}

Програмирање 2 - Вежби