You are on page 1of 22

Гимназија Крушевац

Матурси рад из рачунарства и информатике

КЛАСЕ И ОБЈЕКТИ У ПРОГРАМСКОМ ЈЕЗИКУ С++

Ментор: Ученик:

Горан Бонић Димитрије Петронијевић,IV-7

Крушевац, мај 2022. Год.


Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
САДРЖАЈ
Страна

1. Објективно орјиентисано програмирање у језику С++............................................................................................3


2. Основе о класама и објектима....................................................................................................................................4
2.1. Дефинисање класа..........................................................................................................................................4
2.2. Спецификатори приступа члановима класе..............................................................................................5
2.3. Декларација објеката......................................................................................................................................5
3. Методе класа.................................................................................................................................................................6
4. Конструктор ...................................................................................................................................................................8
4.1. Конструктор са параметрима.........................................................................................................................9
4.2. Конструктор копирања...................................................................................................................................10
4.3. Позивање различитих конструктора............................................................................................................10
5. Деконструктор ..............................................................................................................................................................12
6. Показивач This..............................................................................................................................................................13
7. Заједнички елементи класа.......................................................................................................................................13
7.1. Заједнички подаци чланови..........................................................................................................................13
7.2. Заједничке функције чланице.......................................................................................................................15
8. Изведене класе.............................................................................................................................................................16
8.1. Појам изведених класа..................................................................................................................................16
8.2. Декларација изведених класа.......................................................................................................................16
8.3. Права приступа члановима класа.................................................................................................................17
8.4. Констрактори и деконстрактори изведених класа.....................................................................................17
8.5. Виртуелне функције........................................................................................................................................18
8.6. Вишеструко наслеђивање.............................................................................................................................19
9. Пријатељи класа...........................................................................................................................................................19
9.1. Пријатељске функције...................................................................................................................................19
9.2. Пријатељске класе..........................................................................................................................................20
10. Закључак.......................................................................................................................................................................21
11. Литература.....................................................................................................................................................................22

2
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7

Објективно опријентисано програмирање у језику С++


У програмским језицима можемо наћи две врсте оријентације програмирања, а то су рано настало
процедуларно програмирање, које ради на основу процедура, и обијектно оријентисано програмирање које
функционише на принципу правих објеката унетих у програм.

На почетку, рани програмски језици су били такозвани процедурални, из разлога што је програмер на
првом месту дефинисао скуп процедура које би његов рачунар након тога обрађивао. Процедрално
програмирање користи листу команди и инструкција које говоре компјутеру шта да ради корак по корак. Ово
програмирање се, као што му и име налаже, ослања на процедуре које садрже низ корака које програм треба
извршити.Процедурални језици су познати и као „top-down“ jeзици, тојест процедуре се извршавају одозго на
доле.

Неки од примера процедуралних језика су: Fortran, COBOL, С, BASIC i Pascal.

Ове врсте језика се и данас користе, али у случају када желимо да урадимо нешто ван основног низа
корака, ова врста програма постаје веома тешка за контролу. Из тог разлога је настало објектно оријентисано
програмирање.

Објектно оријентисано програмирање је увело појам објекта. Објекти су скупови информација које се
третирају као јединствен ентитет. Објекти као главни појмови таквих језика су уско везани за класе.

Класе дефинишу објекат, тојест у њима се налазе атрибути и методе које објекат треба да има. Пре
креације објекта, обавезно се креира класа. Једноставно речено, класе представљају нацрте који говоре како
наш објекат може да буде креиран, а свака класа може имати више објеката.

Неки од познатих објектно оријентисаних програмских језика су: Java, Swift, Ruby, PHP, C#, C++

Када бисмо упоредили процедурално и објектно оријентисано програмирање можемо да нађемо


зашто је једно боље од другог у одређеним сферама рада. За пример, код процедуралног програмирања,
програм се чита одозго према доле, док је код објектно оријентисаног одоздо на горе. Код процедуалног,
првенство у програму има системски пристп решавања проблема, док код објектно оријентисаног је фокус на
сугурности податка без обзира на алгоритам. Код процедуралног програмирања нема наслеђивања података
док код објектно оријентисаног има, итд.

C++ је виши програмски језик који је првобитно развијен у Беловим лабораторијама (лабораторији
телекомуникационе компаније Bell) за објектно оријентисано програмирање у пројекту под руководством
Бјарнеа Строуструпа током 1980-их као проширење програмског језика C, па му је оригинално име било „C са
класама“ (енгл. C with classes). Ја ћу вам овде писати о самој објективној орјентацији овог језика и о њеним
главним компонентама, класама и објектима, њиховој међусобној интеракцији и функцији у самом програму.

3
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Основе класа и објеката
Програмски језик С++ омогућује креирање нових типова података, који су сложене структуре и називају
се класе. Класе представљају сложени скуп различитих типова података и скуп објеката са истим особинама и
начином понашања. Када креирамо податак који је одређен класом, тај тип податка се зове објекат. Сваки
објекат има своје вредности којима се може руковати, било са целином или са одређеним деловима објекта.
Класе можемо да замислимо као нацрт, класу нечга, док објекат можемо да замислимо као производ
направљен на основу тих „нацрта“(нпр. класу дефинишемо као воће, док објекат дефинишемо као јабуку,
наранџу, банану...). Која је сврха класа и објеката када можемо нормално дефинисати податке? Зато што класа
дефинише како неки податак (објекат) бива дефинисан, рукован, подешаван и уништен, и тиме нам олакшава
само руковање податком.

Дефинисање класа
Креирањем класе се, као што је речено, конструише неки шаблон за неки тип податка. Она не креира
сам податак, него ограничава шта све може бити унето у тај податак, какве особине он може да добије и како
ће се он понашати. Дефиниција класе мора бити тамо где се та иста класа користи, зато се класе најчешће
дефинишу у заглављу програма, иако је могуће дефинисати и у главној функцији.
Дефиниција класе почиње командом class након које следи име класе које ми задајемо, праћено паром
витичастих заграда након којих се дефиниција класа завршава са тачком-зарез. Након тога класе можемо
поделити у три категорије по приступу података и то су:
1) Јавне (public)
2) Приватне (private)
3) Заштићене (protected)
Свака од њих се дефинише додавањем речи public, private, protected (у зависности од тога коју дефинишемо)
Пр. Креираћемо каласу кутија која ће имати особине дужина, ширина и висина које су приватне, и јавне
методе којима се приступа податцима.

Слика 2.1

4
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Овако декларисана класа не може имати заштићене компоненте, али ако бисмо из ове класе извели још
једну класу, она би могла да има заштићене компоненте.

Спецификатори приступа члановима класе


У објектно орјентисаним језицима је карактеристично сакривање података, што спречава утицање на те
податке од стране кода који није наведен у самом телу класе. Ово се у С++ изводи коришћењем лабела public,
private и protected којима означавамо одговарајуће делове унутар тела класе. Ове кључне речи се такође зову
и спецификатори приступа.

У класи се могу навести више од једног спецификатора, који делује све док се не наведе неки други
спецификатор или се декларација класе не заврши. У случају да не дефинишемо спецификатор испред
атрибута класе, тај атрибут поприма спецификацију private.

Слика 2.2

Јавни(public) чланови класе су приступни из било ког дела програма, могу се мењати и користити без
обзира на локацију, докле год је у истом програму. Могуће им је приступити без коришћења функција класе

Приватни(private) чланови класе су доступни само у оквиру класе и помоћу метода дефинисаних у самој
класи или пријатељских функција.

Заштићени(protected) чланови класе су слични приватним члановима класе, само се разликују по


погодности да могу да буду присупљне из изведених класа(о којима ће бити приче касније).

Декларација обеката
Класе, као што рекох, представљају шаблон по коме се креирају објекти везани за ту класу. Објекти се
декларишу на исти начин као и променљиве основних типова података. На првом месту напишемо име класе у
коју желимо да направимо објекат, а након тога и име самог нашег објекта.

Пр. Креираћемо два објекта из претходно наведене класе

Објекти узимају засебне вредности и новонастали објети исте класе немају утицај на податке већ
дефинисаних објеката

5
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Што се тиче приступу податцима нашег објекта, у случају да је он креиран под класом спецификатора
public, онда ми можемо да им приступимо једноставним оператором приступа (.). Овакав начин приступу
података није могућ код private и protected типова података из разлога што они не допуштају приступ
податцима методама које се налазе ван метода дефинисаних у класи, али о томе ће бити приче касније.

Пр. Приступање података објекта оператором (.):

Слика 2.3

Методе класа
Методе класа су заправо функције које омогућавају приступ приватним и заштићеним атрибутима класа
ван самог тела класе, тојест објекта. Методе се деле на:

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

-Методе којима је могуће да се мењају вредност податка, или да се додељује нова вредност, који се зову
мутатори или модификатори.

6
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Кад би функција била инспектор, можемо да знамо ако се иза њеног залавља налази реч const што
означава неку константну вредност. Овакве чланице функције се у С++ називају константне функције чланица
(constant member functions). Функција чланица која мења објекат се означава другачије

Слика 3.1
Пр. Класа са приватним податцима које су дефинисане у самом телу класе:

Слика 3.2

Постоји и други начин, по коме је функција дефинисана ван тела класе, а њен скелет остаје дефинисан у
класи, што можемо видети на следећем примеру.

7
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7

Пр.2 Класа са приватним податцима које су дефинисане ван тела класе:

Оператор '::' овде


означава да та
функција припада
класи наведеној
испред оператора.

Слика 3.3

Конструктор
Конструктор је функција која има исто име као и класа за коју је везан. Конструктор се користи приликом
„конструкције“ објекта дате класе. Он нема тип података који враћа и може да има аргументе произвољног
типа. У конструктору, чланобима објекта се као и обично приступа, као и у било којој другој функцији.
Конструктор означава почетак живота сваког објекта и он се увек позива при креирању објекта.

Кад се конструктор креира, испред самог имена конструктора не стоји ништа. Пошто конструктор нема
вредност коју враћа, испред њега не стоји чак ни void, већ само стављамо име самог конструктора.
Конструктори су веома корисни за постављање иницијалних(почетних) вредности у бојекат неке класе.

При писању, коструктор почиње са именом класе на коју се односи, праћен класичним писањем билокакве
обичне функције, наводе се параметри након чега следи и тело самог конструктора.

Слика 4.1
-Ово су неки примери креирања конструктора.

8
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Конструктор са параметрима
Конструктор са параметрима није ништа друго но конструктор у коме имамо иницијаторе који нам
дозвољавају да при самом креирању конструктора унесемо иницијалне(почетне) вредности том објекту.

Подразумевајући конструктор, или конструктор без задатих параметра, постоји само како би дефинисао
празан објекат, али ми можемо додати параметре у конструктор и тиме уградити му вредности при његовој
креацији. Ово изводимо додавањем параметара у предео за аргументе конструктора као на следећој слици:

Пр. Креирамо тачку у простору и додељујемо јој кординате преко конструктора са параметрима

Слика 4.2

Други начин је да тело конструктора буде дефинисано ван класе и тада се мора користити оператор '::'.У
случају да желимо да при креацији неколико објеката свима њима доделимо неку почетну вредност, у томе ће
нам послужити листа за иницијацију. Коришћење листе за иницијацију је веома слично имплицитној додели
вредности податку.
У случају конструктора са параметрима може се користити следећа 2 начина

Слика 4.3

9
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Оба начина доводе до истог решења

Листа за иницијализацију се убацује одмах након навођења параметара конструктора, и знакадве тачке (:),
где се наводи свака појединачна вредност за променљиве чланове, који су раздвојени знаком зарез(,). Може
се примети да у овом случају више не морамо да вршимо експлицитну доделу вредности у телу конструктора,
пошто је тај део кода замењем листом за иницијализацију. Треба да се нагласити да се листа за
иницијализацију не завршава знаком тачка-зарез(;). Уколико нпр. код неке класе С имате потребу да
иницијализујете више поља, нпр. X, Y, Z, итд., онда је могуће користити исту синтаксу као у претходном
примеру, с тим што ће поља бити одвојена зарезима, као на следећем примеру:

Слика 4.4

Конструктор копије
Конструктор копије је конструктор који креира објекат и додељује му вредности и методе већ постојећег
објекта, практично правећи „копију“ тог већ постојећег објекта.

Конструктор копирања се користи у неколико случајева, и то:

- да иницијализује један објекат коришћењем већ постојећег објекта истог типа.


- да копира један објекат како би копију проследио функцији.
- да копира један објекат који ће бити враћен као резултат из функције.

Ако којим случајем конструктор копије није дефинисаам унутар саме класе, компајлер га сам дефинише.

Најуобичајенији облик конструктора копије је:

Слика 4.5
Позивање различитих конструктора
У једној класи је могуће искористити све три врсте конструктора до сад поменуте. Постоји редослед по
коме конструктори бивају позивани и које вредности они вуку са собом правећи нови објекат.

Ово најлакше можемо видети корз пример:

10
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7

Пр. Коришћење све три врсте конструктора:

Слика 4.6

Као што се јасно види на слици, сва три конструктора су правилно искоришћена, и као потврду на то
добијамо поруку на екрану да је све исло како треба. Како је и на слици приказано, у ком облику ми
позовемо конструктор, тог облика ће нам он и дефинисати објекат. Иако је он под истим именом, ми
можемо да управљамо на који начин ће он нашем новонасталом објету доделити вредности.

Ако не наведемо никакве параметре, конструктор ће аутоматцки позвати на подразумевајући конструктор


код кога су већ унете вредности.

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

Ако наведемо следећу једнакост, у овом случају т3 и т1, ми наглашавамо да хоћемо да направимо копију
објекта т1 у објекту т3 позивајући се на конструктор копије.

Не постоји специфичан редослед извршавања, већ конструктори прате нормалан ток програма.

11
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Деконструктор
Функција која носи исто име као и класа, а испред ње стоји знак „ ~ ” зове се деконструктор. Ова функција
се позива при престанку живота неких објекта (статичких, аутоматских, класних чланова, динамичких и
привремених објеката) аутоматски. Деконструктор нема тип који враћа а ни аргументе који се у њега уносе.
Свака класа може да има само један деконстрктор.

Деструктор се означава именом класе ипред које стоји знак „ ~ “, а пошто он нема повратне вредности и
аргументе, остављамо га таквог какв јесте:

Деконструктор је функција која претвара меморијска места које је програм доделио неким објектима класе
( и свим њиховим члановима ) у празна меморијска места која су спремна да се искористе у неке друге сврхе
касније.
Деструктор се може имплицитно позвати и кад уништавамо динамички објекат командом delete, док се за
низ деструктор позива за сваки појединачни елемент. Редослед позива деструктора је обрнут редоследу
позива конструктора свеједно.
Деструктори се углавном користе када објекат треба да деалоцира меморију или неке системске ресурсе
које је конструктор алоцирао; то је најчешће случај када класа садржи чланове који су показивачи. После
извршавања тела деструктора, аутоматски се ослобађа меморија коју је објекат заузимао.
Пр. Примена конструктора и деконструктора:

Слика 5.1
Показивач This

12
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Сваки објекат у C++-у има приступ својој адреси (адреси на којој је смештен меморији) помоћу једног веома
битног показивача који се назива показивач this. Показивач this је један имплицитни параметар за све функције
класе. Тако да, унутар тела функције, показивач this се може коритити за објекат над којим је функција и
позвана.

Пријатељске функције немају овај показивач this, јер пријатељске функције нису чланице класе. Само
функције чланице имају показивач this.

Слика 6.1

Коришћење показивача this може бити корисно код дефинисања приступних функција, где аргумент често
може да има исто име као и члан класе. Онда показивач this може да омогући разлику између аргумента и
члана класе.

Заједнички елементи класа


Понекад нам у програмирању треба да декларишемо заједничке вредности нечему. Тако на пример
функцијама чланица можемо да доделимо заједничку вредност чиме оне постају заједнички елементи класа, а
остале остају сопствене. Ако није назначено да је неки податак заједнички, он самим тим остаје
сопствен(засебан).

Зајденички подаци чланови


Кад креирамо неки објекат, он је састављен са посебним комплетом података чланова. Ако то желимо, ми
можемо да узмемо један податак/члан који желимо да нам буде исте вредности у свим објектима наше класе.
Такви чланови се називају статички чланови и означавају се помоћу речи static, nakon koje sledi klasična
deklaracija objekta.

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

Уопште, статички члан класе има сва својства глобалног статичког објекта, осим области важења класе и
контроле приступа.

Он мора да буде декларисан на посебан начин ван декларације класе и тад се приступање овом члану
врши преко оператора „: :“

Нпр.: int x : :i=5;

13
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Можемо приступити статичком члану из функције чланице, али чак и ван функције чланице, па и пре
формирања иједног објекта класе, али уз поштовање правила приступа.

Заједнички чланови се углавном користе када сви примерци једне класе треба да деле неку заједничку
информацију, нпр. када имамо фиксирану вредност за све објекте, када желимо да нам „све буде на окупу“.

Заједнички чланови смањују потребу за глобалним објектима и тако повећавају читљивост програма, јер је
могуће ограничити приступ њима, за разлику од глобалних објеката.

Пр. Написаћемо програм у коме писемо тачке у координатном систему, и желимо да нам све тачке буду на
истој линији паралелној y оси, користећи заједнички члан.

Слика 7.1

Као што се може видети са слике, променом вредности тачке y по други пут мења њену вредност било где
где се она појављује, и тиме добијамо константну вредност члана ког желимо, иако нам се x осе мењају за
сваки објекат када ми променимо њихову вредност понаособ.

14
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Заједничке функције чланице
И функције чланице могу да се декларишу као заједничке за целу класу, додавањем речи static испред
декларације функције чланице.

Статичке функције чланице имају сва својства глобалних функција, осим области важења и контроле
приступа. Оне не поседују показивач this и не могу непосредно (без помињања конкретног објекта класе) да
користите нестатичке чланове класе. Могу непосредно користити само статичке чланове те класе.
Статичке функције чланице се могу позивати за конкретан објекат, али и пре формирања иједног објекта
класе, преко оператора `: :`.
Пр. Узећемо исти пример тачака у координатном систему:

Слика 7.2
Као и малопре, можемо да приметимо да функција немења своју вредност и остаје иста без обзира на то
који ми објекат узимамо у функцију. На тај начин, прегледније и лакше можемо да решавамо проблема кроз
наш програм.

Изведене класе
15
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Појам изведених класа
Често се среће случај да постоји велика сличност између објеката који нас окружују, где један објекат има
све особине као и неки други, али и неке додатне могућности. Тако, на пример, имамо мобилни телефон, који
генерално има функцију позива, скупљања адреса, слања порука, али су различити произвођачи додали неке
само њиховим телефонима својствене додатке, који додатно проширују могућности телефона.

На пример неки произвођачи у својим мобилним телефонима омогућују да се под једним именом могу
забележити више телефонских бројева, електронска адреса, надимак, титула и друго, док су други дозволили
бесплатно и лако прузимање музике а трећи веома велики асортиман занимљивих игрица и апликација.

Из овога видимо да сваки мобилни телефон мора подржавати одређене особине, али да је у њих могуће
имплементирати и неке друге

На основу овога можемо да закључимо да неке класе могу садржати све чланове друге класе, али могу
имати и неке своје специфичне чланове. Тада кажемо да је да имамо једну класу која је специфичан
представник дате класе и таква релација се у програмирању назива наслеђивање (енг. inheritance).

Наслеђивање не мора постојати само између две класе, можемо имати читаву хијерархију. Тако, на пример
квадрат је специфичан објекат типа правоугаоник, правоугаоник је специфичан примерак класе четвороугао,
четвороугао је специфичан примерак класе дводимензионалне фигуре. Постоји небројено много примера за
све ово, али једноставно се може рећи да уколико класа B има све особине класе A, ако и неке своје које не
постоје у класи A, тада је класа B изведена из класе A, тојест, класа B је подскуп класе A.

Каже се још и да је класа А основна класа, а класа B изведена класа, такође и да је класа А надкласа а класа
B подкласа, или најлакше речено да је класа А родитељ класа а да је класа B дете класа.

Декларација изведених класа


Декларација изведених класа је веома слична декларацији најобичнијих класа. Да би се декларисала нека
нова класа из класе која већ постоји, не морамо да мењамо већ постојећу класу или да је поново пишемо.
Изведена класа се декларише тако што сенаводи public после знака „ : “ и име новонастале класе пре.

Потребно је напоменути да се не наслеђује оператор `=`.

16
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Права приступа члановима класа
Кључна реч public у заглављу при декларацији изведене класе значи да су сви јавни чланови основне класе
уједно и јавни чланови изведене класе.

Приватни чланови основне класе увек то и остају. Функције чланице изведене класе не могу да приступају
приватним члановима основне класе. Нема начина да се "повреди приватност" основне класе јер би то
значило да постоји могућност да се пробије енкапсулација коју је замислио програмер основне класе.

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

Често постоји потреба да неким члановима основне класе могу да приступе функције чланице изведених
класа, али не и корисници класа. То су најчешће функције чланице које директно приступају приватним
подацима члановима. Чланови који су доступни само изведеним класама, али не и корисницима споља,
наводе се иза кључне речи „protected:“и називају се заштићени чланови (енгл. protected members).

Заштићени чланови остају заштићени и за следеће изведене класе при сукцесивном наслеђивању. Уопште,
не може се повећати право приступа неком члану који је приватан, заштићен или јавни. Уколико се иза знака
„:“ не наведе public или се стави private подразумева се да сви јавни и заштићени подаци основне класе постају
приватни подаци за изведену класу. Ако се иза знака „:“ наведе protected подразумева се да сви јавни и
заштићени подаци основне класе постају заштићени подаци за изведену класу.

Конструктори и деструктори изведених класа


Приликом креирања објекта изведене класе, позива се конструктор те класе, али, за разлику од
уобичајеног, позивају се и конструктор основне класе. У заглављу дефиниције конструктора изведене класе, у
листи иницијализатора, могуће је навести и иницијализатор основне класе.

При креирању објекта изведене класе редослед по коме позивамо конструкторе је следећи:

1. иницијализује се под-објекат основне класе, позивом конструктора основне класе;

2. иницијализују се подаци чланови, евентуално позивом њихових конструктора, по редоследу


декларисања;

3. извршава се тело конструктора изведене класе.

При унштењу објекта, као и обично, редослед позива је обрнут.

17
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Пр. Конструисаћемо програм који садржи основну и изведену класу, обе ће користити конструкторе и
деконструкторе и приказаће поруку при конструкцији/деконструкцији:

Слика 8.1

Виртуелне функције
Функције чланице основне класе које се у изведеним класама могу реализовати специфично за сваку
изведену класу називају се виртуелне функције (енгл. virtual functions). Виртуелна функција се у основној класи
декларише помоћу кључне речи виртуал на почетку декларације. Приликом дефинисања виртуелних функција
у изведеним класама не мора се стављати реч virtual. Приликом позива се одазива она функција која припада
класи којој и објекат који прима позив.

Виртуелна функција основне класе не мора да се редефинише у свакој изведеној класи. У изведеној класи у
којој виртуелна функција није дефинисана, важи значење те виртуелне функције из основне класе.
Декларација неке виртуелне функције у свакој изведеној класи мора да се у потпуности слаже са декларацијом
те функције у основној класи (број и типови аргумената, као и тип резултата).

Ако се у изведеној класи декларише нека функција која има исто име као и виртуелна функција из основне
класе, али различит број и/или типове аргумената, онда она сакрива (а не редефинише) све остале функције са
истим именом из основне класе. То значи да у изведеној класи треба поново дефинисати све остале функције
са тим именом. Никако није добро да изведена класа садржи само неке функције из основне класе, али не све:
то значи да се не ради о правом наслеђивању. Виртуелне функције морају бити чланице својих класа (не
глобалне), а могу бити пријатељи других класа.
18
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7

Вишеструко наслеђивање
Некад постоји потреба да изведена класа има особине више основних класа истовремено.Тада се ради о
вишеструком наслеђивању (енгл. multiple inheritance).

На пример, мотоцикл са приколицом је једна врста мотоцикла, али и једна врста возила са три точка. При
том, мотоцикл није врста возила са три точка, нити је возило са три точка врста мотоцикла, већ су ово две
различите класе. Класа мотоцикала са приколицом налеђује обе ове класе.

Класа се декларише као наследник више класа тако што се у заглављу декларације, иза знака „:“, наводе
основне класе раздвојене зарезима. Испред сваке основне класе треба да стоји реч public.

Пријатељи класа
Често је добро да се класа пројектује тако да има и "повлашћене" кориснике, односно функције или друге
класе које имају право приступа њеним приватним члановима. Такве функције и класе називају се
пријатељима (енгл. friends).

Пријатељске функције
Пријатељске функције (енгл. friend functions) су функције које нису чланице класе, али имају приступ до
приватних чланова класе. Те функције могу да буду глобалне функције или чланице других класа.

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


декларацију те функције са кључном речи friend испред. Пријатељска функција се дефинише на уобичајен
начин:

Пријатељска глобална функција:

Пријатељска чланица друге класе:

Глобалне функције које представљају услуге неке класе или операције над том класом се класним
услугама (енгл. class utilities).

19
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Нема формалних разлога да се користи глобална (најчешће пријатељска) функција уместо функције
чланице. Постоје прилике када су глобалне (пријатељске) функције погодније:

- функција чланица мора да се позове за објекат дате класе, док глобалној функцији може да се достави
и објекат другог типа, који ће се конвертовати у потребни тип;

- када функција треба да приступа члановима више класа, ефикаснија је пријатељска глобална функција;

- понекад је нотационо погодније да се користе глобалне функције (позив је f(x)) него чланице (позив је
x.f()); на пример, max(a,b) је читљивије од a.max(b);

- када се преклапају оператори, често је једноставније дефинисати глобалне (операторске) функције


неко чланице.

"Пријатељство" се не наслеђује: ако је функција f пријатељ класи X, а класа Y изведена (наследник) из


класе X, функција f није пријатељ класи Y.

Пријатељске класе
Ако је потребно да све функције чланице класе Y буду пријатељске функције класи X, онда се класа Y
декларише као пријатељска класа (friend class) класи X. Тада све функције чланице класе Y могу да приступају
приватним члановима класе X, али обратно не важи ("пријатељство" није симетрична релација):

class X
{
friend class Y;
//...
};
"Пријатељство" није ни транзитивна релација: ако је класа Y пријатељ класи X, а класа Z пријатељ класи
Y, класа Z није аутоматски пријатељ класи X, већ то мора експлицитно да се нагласи (ако је потребно).

Пријатељске класе се типично користе када неке две класе имају тешње међусобне везе. При томе је
непотребно (и лоше) "откривати" делове неке класе да би они били доступни другој пријатељској класи, јер ће
на тај начин они бити доступни и осталима (руши се енкапсулација). Тада се ове две класе проглашавају
пријатељским.

20
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Закључак
Објектно оријентисано програмирање је практичније за рад од процедуралног програмирања због саме
флексибилности коришћења класа и објеката. Веома лако сређујемо податке, можемо да утицемо на
сигурност податка, имамо могућност да креирамо објекте из стварног света и мого тога што није било могуће у
процедуралним програмским језицима а да не ризикујемо грешке или трошимо белики број редова кода за
шта би објективно оријентисаном програмирању требало неколико пасуса.

Класе и објекти као појмови програмског језика С++ имају широк спектар употребе. Они су главни
појмови овог језика и већина његове функционалности се заснива на њима. Због оваквих разлога је данас
популарно објектно оријентисано програмирање, у које сврставамо језике као што је и сам С++.

Лично сматрам да је објектно оријентисан програмски језик далеко суперијорнији што се тиче
ефикасности и лакоће рада него било који процеруларни програмски језик

21
Класе и објекти у програмском језику с++ Димитрије Петронијевић, IV-7
Литература
https://www.youtube.com/watch?v=qKQzpoPk4wk

http://digis.edu.rs/pluginfile.php/17220/mod_resource/content/1/Osnove%20programiranja%20u
%20programskom%20jeziku%20C%20i%20C%2B%2B%20-%20Deo%20osam%20-%20PDF.pdf

http://www.tehskolaal.edu.rs/starisajt/data/PROGRAMIRANJE-IV%20RAZRED.pdf

https://rti.etf.bg.ac.rs/rti/ir2oo1/predavanja/03%20Klase%20i%20objekti.pdf

https://web.math.pmf.unizg.hr/~vpetrice/OP/Vjezbe%2001%20-%20Klase.pdf

https://www.ucg.ac.me/skladiste/blog_13056/objava_42962/fajlovi/Prez5_2019.pdf

https://sr.m.wikipedia.org/sr-ec/C%2B%2B#%D0%9A%D0%BB%D0%B0%D1%81%D0%B5

https://www.youtube.com/watch?v=OdXhjGGiqJs

https://www.manuelradovanovic.com/2015/10/klase-u-c-programskom-jeziku-1-deo.html

https://www.cplusplus.com/doc/tutorial/operators/

https://cubes.edu.rs/sr/30/obuke-i-kursevi/sta-je-objektno-orijentisano-programiranje

22

You might also like