classes objects c
Кратки увод у часове и предмете на језику Ц ++.
Класе и објекти су градивни блокови објектно оријентисаног програмирања у језику Ц ++. Сваки ентитет, живи или неживи, може се представити као објекат и програмирати на одговарајући начин помоћу Ц ++. Тако ентитети попут аутомобила, стола, особе, птице, животиње итд. Могу бити представљени као предмети.
Класа је ниво виши од објекта и представља категорију предмета. Дакле, класа делује као нацрт који оцртава дизајн предмета и детаље. То укључује податке који се користе за описивање објекта и разне методе или функције које могу деловати на податке о објекту.
=> Овде припазите на једноставне серије обуке за Ц ++.
У овом упутству ћемо разговарати о свим детаљима класе и објеката у Ц ++-у, заједно са њиховим програмским приказом.
Шта ћете научити:
- Предавања
- Предмети
- Специфичари приступа
- Конструктори
- Врсте конструктора
- Оператор доделе
- Разарачи
- „Овај“ показивач
- Закључак
- Препоручено читање
Предавања
Класа на Ц ++ може се посматрати као нацрт или костур одређеног ентитета. Класа је кориснички дефинисани тип података. Садржи опште информације или податке за тај одређени ентитет и функције које делују на тај ентитет.
У синтакси Ц ++ дефинишемо класу са кључном речи „класа“, а затим именом класе.
Име класе праћено је детаљима класе који су затворени у витичасте заграде и завршава се тачком и зарезом.
Следећи блок приказује општу синтаксу за дефиницију класе.
Као што је приказано у горњем представљању, класа може имати спецификаторе приступа попут јавног / заштићеног / приватног. Може имати чланове података и функције чланова. Подаци и функције се позивају као чланови класе. Подразумевано су чланови приватни за класу, тако да ниједан спољни ентитет нема приступ тим члановима.
На пример, возило може бити генерализована класа која има својства попут модела, боје, броја шасије, просечне_брзине итд. Може имати функције као што су цхангеМодел, убрзање, успоравање итд. које извршавају радње на члановима података. Можемо дефинисати класу названу „возило“ која ће имати све ове чланове података и функције.
Као што је већ поменуто, класа је само нацрт за ентитете. Не заузима простор у меморији када је дефинисан. Да би класа била функционална, морамо да дефинишемо објекте који могу да користе чланове класе.
Предмети
Да бисмо користили функционалност класе, морамо да направимо инстанцу класе да бисмо креирали објекат. Објекат је инстанца класе. Једноставним речима, можемо рећи да је објекат променљива типа класе.
Општа синтакса за стварање објекта је:
classname object_name;
Једном када се објекат креира, може се користити за приступ члановима података и функцијама те класе.
Приступ члановима класе (подацима и функцијама) врши се помоћу оператора тачка (.), Који се назива и оператором за приступ члановима.
Ако је обј име објекта и ако у класи постоји функција „дисплаи ()“, тада се функцији може приступити као „обј.дисплаи ()“.
Међутим, у горњој изјави постоји и квака. Дисплеју функције () можемо приступити помоћу објекта и оператора тачака ако је функција „јавна“.
Специфичари приступа
У језику Ц ++ приступ члановима података и функцијама у класи зависи од приступа датог одређеном члану података или функцији помоћу спецификатора приступа.
Ц ++ подржава следеће спецификаторе приступа:
# 1) Приватно
Ово је задати спецификатор приступа за класу у Ц ++. То значи да ако није наведен спецификатор приступа за чланове у класи, онда се сматра приватним.
Када је члан приватан, не може му се приступити изван класе. Чак ни коришћење објекта и оператора тачака. Члановима приватних података може се приступити само помоћу функција члана класе.
пример регуларног израза ц ++
Међутим, постоји изузетак од овог правила, о којем ћемо разговарати у нашим каснијим темама.
# 2) Јавно
Члан података или функција која је дефинисана као јавна у класи доступна је свима изван класе. Овим члановима се може приступити помоћу објекта и тачке оператора.
# 3) Заштићено
Заштићени члан класе доступан је самој класи и подређеним часовима те класе.
Овај спецификатор приступа се посебно користи у случају наследства и о томе ћемо детаљно разговарати док ћемо расправљати о теми наследства.
Узмимо следећи пример да бисмо боље разумели ове спецификаторе приступа.
#include #include using namespace std; class ABC{ int var1 = 10; public: string name; void display() { cout<<'var1 ='< Излаз:
вар1 = 10
наме = стх
У овом програму имамо два члана података од којих је вар1 типа инт приватан (спецификатор приступа није наведен. Подразумевано је приватан). Други члан је име низа, које је проглашено јавним. Имамо још један приказ функције који приказује вредност оба ова члана.
У главној функцији проглашавамо објект абц класе АБЦ. Затим постављамо вредности члановима података и такође приказ функције позива помоћу објекта „абц“.
Међутим, када компајлер наиђе на ред абц.вар1 = 20; генерисаће грешку да је „вар1 приватна променљива“.
То је зато што не можемо приступити приватним подацима члановима класе изван класе. Стога постоји грешка. Али можемо му приступити унутар функције и стога када излазимо вредност вар1 у функцији приказа; не баца никакву грешку.
Отуда излаз програма приказује почетну вредност са којом је вар1 декларисан.
До сада смо видели детаље о класама, објектима и спецификаторима приступа, сада ћемо узети потпун пример примера ученика класе. Овај разред има чланове података: студент_ид, студент_наме и студент_аге. Такође има функције члана за читање информација о студентима и приказивање информација о студентима.
Да бисмо читаоцима олакшали ствари, прогласили смо све чланове разреда јавним.
Следећи програм приказује комплетну примену.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; void read_studentInfo(); void print_studentInfo() { cout<<'
Student ID : '<student_id; cout<>student_name; cout<>student_age; } int main() { student s1; s1.read_studentInfo(); s1.print_studentInfo(); }
Излаз:
Унесите ИД ученика: 1
Унесите име ученика: абц
Унесите студент_аге: 12
Студент ИД: 1
Име студента: абц
Старост ученика: 12
Дакле, имамо комплетну класу која је горе дефинисана. Једина значајна разлика је у томе што смо дефинисали једну функцију „принт_студентИнфо“ унутар класе, док је друга функција „реад_студентинфо“ дефинисана изван класе. То су два начина на које се функције члана могу дефинисати за класу.
Имајте на уму да функција која је дефинисана споља и даље има декларацију / прототип унутар класе. Такође, дефинише се изван класе помоћу оператер резолуције опсега (: :) . Затим у главној функцији креирамо објекат класе ученика, а затим позивамо функције за читање и приказ података.
Конструктори
До сада смо у овом упутству створили једноставан објекат, а затим додељујемо вредности сваком члану података класе у главној функцији након читања ових вредности са стандардног улаза.
У овој теми ћемо погледати посебну функцију која се користи за иницијализацију објекта током његовог стварања. Ова посебна функција назива се конструктор.
Конструктор је функција члана класе, али се она разликује од нормалне функције члана на следеће начине:
- Конструктор нема повратну вредност, тј. Конструктор никада не враћа вредност.
- То је јавна функција члана.
- Користи се за иницијализацију чланова података и конструкцију објекта класе.
- Компајлер га аутоматски позива када се објекат креира.
Врсте конструктора
Ц ++ подржава следеће типове конструктора.
# 1) Подразумевани конструктор
Задани конструктор је основни конструктор и нема параметре. Помоћу подразумеваног конструктора можемо створити једноставан објекат без икаквих параметара.
Подразумевани конструктор има следећу синтаксу:
classname() { //constructor code }
Ако класа нема подразумевани конструктор, онда је преводилац креира.
# 2) Параметарски конструктор
Параметарски конструктор је онај који има листу параметара помоћу које можемо иницијализовати чланове класе. Када декларишемо објекат у параметризираном конструктору, тада треба да прослиједимо почетне вриједности функцији конструктора као параметре.
Параметарисана функција конструктора изгледа као што је приказано доле.
classname(argument list){ //constructor code }
Параметарски конструктор се користи за преоптерећење конструктора. О преоптерећењу ћемо видети више у нашим каснијим темама.
Параметарски конструктор се користи у сврху иницијализације чланова података различитих објеката. Притом можемо различитим вредностима преносити различите вредности чланова података.
# 3) Конструктори за копирање
Ц ++ подржава трећи тип конструктора познат као Копирај конструктор. Његов општи облик је
име класе (цонст име класе & обј);
Као што је приказано у горњој декларацији, у конструктору копирања креира се нови објекат користећи вредности другог објекта исте класе. Параметар који се прослеђује конструктору је стална референца објекта чије ће се вредности користити за изградњу новог објекта.
Конструктор копије обично се позива у следећим ситуацијама:
- Када се објект класе врати по вредности.
- Када се објект преда функцији као аргумент и проследи по вредности.
- Када се објекат конструише од другог објекта исте класе.
- Када преводилац генерише привремени објекат.
Међутим, не можемо гарантовати да ће конструктор копирања сигурно бити позван у свим горе наведеним случајевима јер Ц ++ компајлер има начин за оптимизацију операција копирања.
Конструктор копирања врши копирање у чланку између објеката. Баш као подразумевани конструктор, Ц ++ компајлер креира подразумевани конструктор копије ако га не пружимо у нашем програму. Али када класа има одређене чланове података попут показивача, референци или било које рунтом алокације ресурса, тада морамо да имамо свој кориснички дефинисани конструктор копија.
Разлог је тај што подразумевани конструктор копија изводи само плитку копију чланова података, тј. Оба објекта деле исту меморијску локацију. Ово је у реду за једноставне чланове података који нису показивачи.
Међутим, када су у питању показивачи или било који други динамички чланови података, желели бисмо да подаци буду усмерени на нову меморијску локацију. Ово је дубинска копија и може се постићи само помоћу кориснички дефинисаног конструктора копија.
Доље је дат комплетни програм Ц ++ који имплементира све три врсте конструктора и њихову употребу у конструкцији објекта.
#include #include using namespace std; class student{ public: int student_id; string student_name; int student_age; //default constructor student(){ student_id = 1; student_name = 'abc'; student_age = 10; } //parameterized constructor student(int id,string name,int age){ student_id = id; student_name = name; student_age = age; } //copy constructor student(const student& st){ student_id = st.student_id; student_name = st.student_name; student_age = st.student_age; } void print_studentInfo() { cout<<'
Student ID : '< Излаз:
********** с **********
Студент ИД: 1
Име студента: абц
Старост ученика: 10
********** с2 **********
Студент ИД: 2
Име ученика: киз
Старост ученика: 12
Снимак екрана за исти дат је у наставку.
случајни број између 1 и 10 ц ++

У овом програму смо дефинисали ученика разреда који је сличан ономе из претходног програма. Разлика је у томе што уместо читања вредности чланова података са стандардног уноса кроз функцију дефинишемо три конструктора.
Апсолутно је могуће да класа има више конструктора. Имамо подразумевани конструктор који иницијализује чланове података на почетне вредности. Даље, дефинишемо параметарски конструктор који конструктору прослеђује почетне вредности као параметре.
Даље, дефинишемо конструктор копије коме преносимо константну референцу на објекат студентске класе.
У главној функцији креирамо три објекта одвојено користећи три конструктора. Први објекат с креира се помоћу подразумеваног конструктора. Други објекат с1 креира се помоћу параметарског конструктора, док се трећи објекат с2 креира помоћу конструктора копирања.
ц ++ спавање ()
Обратите пажњу на стварање трећег објекта с2. Овде већ креирани објекат с1 додељујемо новом објекту с2. Дакле, када конструишемо нови објекат помоћу већ постојећег објекта, преводилац позива конструктор копирања.
Оператор доделе
Такође можемо доделити вредности једног објекта другом помоћу оператора додељивања (=). У овом случају имаћемо изјаву попут с1 = с.
Разлика између конструктора копије и оператора доделе је у томе што док конструктор копије конструише потпуно нови објекат, оператор доделе само додељује вредности члана објекта на РХС вредности објекта на ЛХС. То значи да објекти с обје стране оператора додјеле морају постојати прије додјеле.
Разарачи
Деструктор је такође посебна функција попут конструктора, али имплементира функционалност која је потпуно супротна конструктору. Док се конструктор користи за стварање објекта, деструктор се користи за уништавање или брисање објекта.
Неке од карактеристика деструктора укључују:
- Име деструктора је исто као и име класе, али започиње знаком тилде (~).
- Деструктор нема повратни тип.
- Деструктор нема аргументе.
- У класи може бити само један деструктор.
- Компајлер увек креира задати деструктор ако не успемо да га дамо за класу.
Општа синтакса деструктора је:
~classname(){ //cleanup code }
Деструктор класе се обично позива у следећим ситуацијама:
- Када објекат изађе из опсега, аутоматски се позива деструктор класе.
- Слично томе, деструктор се позива када програм заврши извршење. То значи да сви предмети такође престају да постоје. Стога ће бити позван деструктор сваког објекта.
- Деструктор класе се такође позива када се изврши оператор ‘делете’ за брисање објекта.
- Деструктор такође можемо изричито позвати да изврши било какве активности чишћења након што завршимо са функционалношћу објекта.
Следећи пример показује рад деструктора.
#include using namespace std; class sample{ public: sample(){ cout<<'Constructor::sample called'< Излаз:
Конструктор :: узорак позван
Ово је узорак класе
Деструцтор :: ~ позван узорак
Снимак екрана за горњи излаз дат је у наставку.

Дефинисали смо узорак класе у којем смо дефинисали конструктор, деструктор и приказ функције. У главној функцији креирамо објект обј узорка класе, а затим позивамо функцију приказа на овом објекту.
Након тога се извршава поврат 0. У излазу можемо видети да се тренутак када се функција приказа прикаже и програмска контрола дође до израза ретурн 0, изврши деструктор. То значи да се извршава у тренутку када објекат излази из опсега.
„Овај“ показивач
Ц ++ користи посебан концепт везан за објекте, који је познат као „овај“ показивач. Показивач „тхис“ увек показује на тренутни објекат. Према томе, у зависности од ситуације, кад год се морамо позвати на тренутни објекат, користимо показивач „тхис“.
Знамо да се сваки пут када се створи инстанца класе, тј. Објекта, направи посебна копија чланова података класе за објекат. Али када су у питању функције члана класе, сви објекти деле исту копију.
Дакле, када један или више објеката истовремено приступају функцијама чланова, како онда осигуравамо да функције чланова приступају и мењају одговарајуће чланове података?
Ово је место где „овај“ показивач ступа у акцију. Компајлер прослеђује имплицитни показивач са именом функције као „ово“. Ово се назива показивач „овај“.
Показивач „тхис“ просљеђује се као скривени аргумент свим позивима функције члана. То је обично локална променљива. Дакле, показивач „овај“ је стални показивач и његов садржај је меморијска адреса тренутног објекта.
Имајте на уму да је овај показивач доступан само за нестатичне функције чланова, а не и за статичке функције. То је зато што статичким функцијама није потребно приступити помоћу објекта. Може им се директно приступити помоћу назива класе.
Обично користимо показивач „тхис“ у ситуацијама када се променљиве члана и параметри прослеђују за иницијализацију променљивих чланова које деле исто име. Користимо га и када треба да вратимо тренутни објекат из функције.
Погледајмо демонстрацију показивача „овај“ испод.
#include using namespace std; class Sample { private: int num; char ch; public: Sample &setParam(int num, char ch){ this->num =num; this->ch = ch; return *this; } void printValues(){ cout<<'num = '< Излаз:
нум = 100
цх = А.
У горњем програму имамо класу под називом Узорак, са два броја чланова и бројем чланова података. Имамо функцију члана сетПарам која прослеђује параметре са истим именима, нум и цх да би поставила вредности променљивих чланова.
Унутар функције додељујемо ове вредности тренутним променљивим чланова објекта назначеним овим показивачем. Једном када су вредности постављене, тренутни објекат „ово“ се враћа из функције.
У главној функцији прво креирамо објекат класе Сампле, обј и позивамо функцију сетПарам да поставимо вредности, а затим позивамо функцију принтВалуес да би исписали вредности.
Закључак
У овом упутству научили смо основне градивне елементе ООП-а на језику Ц ++. Разумевање класа и објеката су примарни захтеви, за почетак, ООП у језику Ц ++. Такође смо детаљно сазнали о конструкторима и деструкторима са примерима.
У нашем предстојећем упутству сазнаћемо о листама иницијализатора у Ц ++.
=> Овде припазите на једноставне серије обуке за Ц ++.
Препоручено читање
- Питхон ООПс концепти (класе, објекти и наслеђивање Питхон)
- Јава интерфејс и лекција са апстрактним часовима са примерима
- Рад са ВБСцрипт Екцел објектима
- КТП водич # 7 - КТП-ова парадигма идентификације објеката - Како КТП јединствено идентификује објекте?
- Спремиште објеката у КТП-у - Водич бр. 22
- Рад са ВБСцрипт АДОДБ објектима везе
- Рунтиме полиморфизам у Ц ++
- Наслеђивање у Ц ++