C/C++

Урок C++: Класове и обекти...

Print
User Rating:  / 3
PoorBest 

Този урок го започвам с уговорката че няма да мога да го предам на веднъж, ще гледам да го предавам методично, и да ползвам примери от реалният живот за да са по разбираеми.

Започваме и с истинската сила на езика, обектите и обектното ориентирана програмиране.

Каква е концепцията за обектното програмиране.
Тук ще го допълня после, понеже понятията са малко сложнички за разбиране.


Първо ще почна с нещо простичко какво е обект.

Обект това е инстанция на даден клас, тоест обекта съдържа методи който са членове на даденият клас от който е създаден обекта.

Нека да дам пример от реалният живот.


Имаме някакъв обект, примерно котка :cheer: та ние искаме този обект да има методи да прави това което правят котките, примерно мърка, облизва се, върти ушички, има си име, цвят, ака в пясък и така нататъка, въобще всичко което един обект от типа котка искаме да прави..

Но да кажем че сме любители на котките и искаме не една а цели 3 котки :laugh: тези три котки ще бъдат създадени от един клас, от класа котка, трите котки ще са индивидуални личности, както аз и ти сме различни, но все пак но все пак няма да се различават от методите си, тоест всички методи ще са налични и ще работят еднакво..
Името и цвета не са методи а са свойства, свойствата се различават от методите, ще разберете по късно по какво..

Но как се създава клас..
Класът се създава с ключовата дума клас class ime-na-clas;
Пример:

class ime-na-clas{
};

отварящи и затварящи къдрави скобки последвани задължително от точка и запетая в края си.

Създаването на клас започва с декларацията на класа и на методите и свойствата които са необходими на нашият клас, нека създадем една котка.

class cat{
private:

public: //
int ime;
int godini;
void murka();
void vurti_ushichki();
void blije_si_lapichki();
};


Нарочно съм дал интижър тип за име, с цел да не ползвам външна библиотека, така нашата котка робот ще има име целочислен тип, но не обръщайте внимание на името а на самата структура.

Декларирахме нашият клас, сега е нужно да дефинираме методите и свойствата в него.

 Ще почнем първо с метод мърка.



void cat::murka()
{
cout << " Murrrrr \\n " ;
}


така ще имаме работещ метод който ще накара нашата робо-котарана да мърка. :laugh:


Нека създадем и останалите методи.



void cat::vurti_ushichki()
{
cout << " Vurti ushichki \\n " ;
}
void cat::blije_si_lapichki()
{
cout << " Blije lapichki \\n " ;
}


Естествено нашата котка е само виртуална и тук само изписваме методите без да предприемаме някакво действие, ако беше истинска котка робот щеше да има някакъв програмен интерфейс който щеше да ги превръща в движение на стъпковите си мотори и т.н.

Създадохме методите, сега да създадем и обекта.

Ако създадеш клас неговото име става външна ключова дума, тоест този клас не е част от вградените класове той е външен и се ползва само, това е причината да не се оцветяват външните ключови думи...

понеже както казах " името на предварително деклариран клас се превръща в ключова дума " на нас ни трябва просто името на класа и името на обекта.

cat robo_cat_1;

Тук ключовата дума cat казва искам истанция от класа кат с име robo_cat_1 и вече всички налични методи дефинирани в класа са налични и за обекта от този тип клас.

Тоест:

robo_cat_1.vurti_ushichki();
robo_cat_1.blije_si_lapichki();
и тнт.

А ето и един по пълен код:



#include
using namespace std;




class cat{
private:

public: //
int ime;
int godini;
void murka();
void vurti_ushichki();
void blije_si_lapichki();

 };

void cat::murka()
{
cout << " Murrrrr " ;
}
void cat::vurti_ushichki()
{
cout << " Vurti ushichki \\n " ;
}
void cat::blije_si_lapichki()
{
cout << " Blije lapichki \\n " ;
}

void main()
{
cat robo_cat_1;

robo_cat_1.godini=1;

robo_cat_1.murka();


}

 

Тук смятам да се опитам да дам още един пример за обяснение.

Какво е клас, класът е структура в която са налични различни методи и свойства, тези методи приднадлежът на класа в който са дефинирани такива методи се казва че са част от обкръжението на класа, а самите методи и свойства се наричат член функции и те са налични само в инстанцията създадена от нейният клас, тоест истанция  „обект" създаден от класа „куче" не може да ползва метод мърка() който е част от обкръжението на класа „котка" (на практика има едни функции наречени приятелски за който това правила не важи, те разчупват капсулацията, и създават много хубава почва за плюене на Джаба програмистите по С++ забравяйки че джава е писана на С++ )

Но нека продължим с примери пак.
Този път ще оставим животните и котките на мира, за да не се сърдят природозащитниците :silly: и ще направя пример по-интересен.

Представете си един завод „примерно на мерцедес в който брат ми работи"  
значи завода като цяло трябва да вземе нещо и да го произведе каквото трябва да прави и самата програма.
За тази цел в завода има различни отдели който се грижат да различни неща и си има някаква йерархия и начин на управление подчинени данни и така т.н.

Нека да приемем че отделите в едно предприятие са нашите класове, а работниците в тези отдели са нашите методи, който вършат задачи, но е необходима не само да се върши нещо, трябва и да се пазят данни данните се пазят в свойствата.

Та така...
Имаме проблем искаме да си сглобим автомобил.
Търсим решение но какво има в един автомобил гуми, двигател, врати и каросерия.

тоест трябва ни клас " отдел " който да се занимава с гумите, в отдела ще има три работника " методи " гошо, иван и пешо, метод " работник " гошо ще взима от склада чисто новите гуми и джанти ще ги занася на иван който ще ги сглобява и помпи, после ще извика метод пешо който ще ги балансира и ще ги подрежда някъде...
Така за всеки детайл ще има клас и работници..
Най накрая трябва да сглобим всичко на колата, тоест ще има клас и работници " методи " който сглобяват всичко..

Някой за упражнение може да състави проектче в което да са налични методите описани тук.

Аз ще го направя но по късно, сега нямам никакво време.

Урок видимост.

Във всеки клас можеш да декларират типа на видимостта на член-функциите, разграничават се основно 3 типа видимост, а за самото деклариране се ползват ключовете думи..

protected:
private:
public:

ключовете думи protected, private правят член-функциите скрити, тоест само методи членове на класа могат да ги ползвам (Публични методи също могат да ползват, стига да са членове на един клас)

Ключовата дума public: декларира че до член-функциите ще имаме достъп отвяка точка на програмата..
ето как става и самата декларация:

class sample{
protected: // След тази декларация всички член-функции са защитени.
int a;
private: // След тази декларация всички член-функции са частни.
get_parametur();
public: След тази декларация всички член-функции са публични.
set_a();
};

Възможни грешки:
Опит за викане на частна член функция като публична би довело до грешка.

Описание на struct

Всъщност struct и class са синоними в С++
единствената им разлика е че ако не укажеш типа на видимост на член-функциите, в struct те по подразбиране са public, докато в class по подразбиране членовете са private..

Иначе важат абсолютно еднакви правила и за struct и за class.

 

Компютърни езици

Операционни с-ми

Офис

База данни

Въпроси - отговори