Автор Тема: Урок C++: Класове и обекти...  (Прочетена 11895 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Урок C++: Класове и обекти...
« -: 25 Март 2010, 08:16:43 »
Този урок го започвам с уговорката че няма да мога да го предам на веднъж, ще гледам да го предавам методично, и да ползвам примери от реалният живот за да са по разбираеми..

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

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


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

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

Нека да дам пример от реалният живот.
Имаме някакъв обект, примерно котка  :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();
};


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

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

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #1 -: 25 Март 2010, 08:52:48 »
Ще почнем първо с метод мърка..


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();


}

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #2 -: 25 Март 2010, 09:18:51 »
Така не е интересна нашата котка, нека да разчупим малко поведението и..

Слагаме някаква логика примерно чуства  " псевдо чуства естественно  :laugh:  "  когато я погалиш мърка после си ближе лапичките.


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

Ето един по пълен код..

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

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

#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---------> \\n " ;
}
void cat::vurti_ushichki()
{
  cout <<  " <---------Vurti ushichki-----------> \\n " ;
}
void cat::blije_si_lapichki()
{
  cout <<  " <-----------Blije lapichki-----------> \\n " ;
}

void main()
{
cat robo_cat_1;

while(1==1)
{
int deistvie = 0;
cout <<  " Deistvie ot vasa strana \\n 1 Pogalvam q \\n 2 Xrahq q \\n 3 Suzdavam shum \\n "  ;
cin >> deistvie;

if(deistvie == 1)
{
robo_cat_1.murka();
}

if(deistvie == 2)
{
robo_cat_1.murka();
robo_cat_1.blije_si_lapichki();
}

if(deistvie == 3)
{
robo_cat_1.murka();
robo_cat_1.vurti_ushichki();
}

}

}

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #3 -: 27 Март 2010, 09:23:58 »
тук смятам да се опитам да дам още един пример за обеснение..

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

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

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

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

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

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

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

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

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #4 -: 28 Март 2010, 16:41:36 »
Урок видимост..

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

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

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

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

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

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #5 -: 28 Март 2010, 16:46:18 »
Описание на struct

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

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

smflower

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 1
Отг:Урок C++: Класове и обекти...
« Отговор #6 -: 25 Ноември 2010, 09:28:04 »
:laugh:  Много ти благодаря за страхотните уроци! Моля те да качиш още ако имаш време. Наистина ще съм ти благодарна :)

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Отг:Урок C++: Класове и обекти...
« Отговор #7 -: 27 Ноември 2010, 18:58:44 »
Ще направя уроци още не съм ви забравил..
ще има даже и уроци от тип, как работи процесора на ниско ниво. :laugh:  за по любопитните, само не знам в коя категория да ги сложа..

Даже и видео уроци ще се опитам да направя, не знам как ще се справя с тях но..  :cheer:
Ще кача един два пилотни урока, да видя дали ще се харесат.. :P
само сега разработвам един проект едно устройство пиша го изцяло на асемблер за РIC микроконтролери на Майкрочип..

Така че не съм ви забравил, само да си завърша замисала..

ludacros

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 3
Re: Урок C++: Класове и обекти...
« Отговор #8 -: 16 Декември 2013, 21:54:45 »
Някой може ли да ми каже къде са ми грешките и как мога да ги поправя ?





Код: C++
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string>
  4.  
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {int const N=40;
  7. struct avtokushta {
  8. char avtokushta[20];
  9. char avto_nomer[20];
  10. char marka[5];
  11. char godina_pr[10];
  12. char cena[20];
  13. };
  14. void input_avtokushti(struct avtokushta avtokushti[]);
  15. void prezapis_avtokushti(struct avtokushta avtokushti[]);
  16. void podrejdane_avtokushti(struct avtokushta avtokushti[]);
  17. void search_avtokushti(struct avtokushta avtokushti[]);
  18. void output(struct avtokushta avtokushti[]);
  19. void write_to_text_file(struct avtokushta avtokushti[]);
  20. void read_from_text_file();
  21.  
  22. int suma;
  23. int menu(void)
  24. { int izbor;
  25. cout<<"\n **********************Menu*******************************" ;
  26. cout<<"\n ** 1. Za dobawqne na leka kola. ***********************";
  27. cout<<"\n ** 2. Za pokazwane na spisaka. *********************";
  28. cout<<"\n ** 3. Za pokazwane na informaciq. ********************";
  29. cout<<"\n ** 4. Za pokazvane na evtinite koli. *******************";
  30. cout<<"\n ** 5. Izhod ot programata! ******************************";
  31. }
  32. do
  33. {
  34. cout<<"\n Naprawete wa6iqt izbor - ot 1 do 5 : ";
  35. cin>>izbor;
  36. cout<<"\n Wie izbrahte: "<<izbor;
  37. }{
  38. while(izbor<1 || izbor>5);
  39. return izbor;
  40. }
  41.  
  42. void write_to_text_file(avtokushta avtokushti)
  43. {fstream t_file("avtokushti.dat", ios::out | ios::app);
  44. if(!t_file)
  45. {cout<<"\n Greshka pri otwarqne na faila za zapis!"; return ;}
  46. else
  47. {t_file.write((char *)(&avtokushti), sizeof(struct avtokushta));
  48. t_file.close();}
  49. }
  50. void read_from_text_file()
  51. {avtokushta avtokushti;
  52. cout<<"\n\n *** Sadarjanie na faila ***"<<endl<<endl;
  53. fstream t_file("avtokushti.dat", ios::in);
  54. if(!t_file)
  55. {cout<<"\n Greshka pri otwarqne na faila za chetene!"; return;}
  56. t_file.seekg (0L, ios::end);
  57. long int length = t_file.tellg();
  58. t_file.seekg(0L, ios::beg);
  59. if(length == 0) {cout<<"\n Failat e prazen !!! \n";return;}
  60. else
  61. {t_file.read((char*)(&avtokushti), sizeof(avtokushta));while(!t_file.eof())
  62. {cout<<" avtokushta: "<<avtokushti.nomer<<endl;
  63. cout<<" avto_nomer: "<<avtokushti.marshut<<endl;
  64. cout<<" markaa: "<<avtokushti.fam<<endl;
  65. cout<<" godina_pr: "<<avtokushti.brpat<<endl;
  66. cout<<" cena"<<avtokushti.cena<<endl;
  67. t_file.read((char*)(&avtokushti), sizeof(avtokushta));}
  68. t_file.close();
  69. }
  70. }
  71.  
  72. void search_from_text_file()
  73. { avtokushta avtokushti;
  74. cout<<"\n\n Tarsene waw faila "<<endl<<endl;
  75. fstream t_file("avtokushti.dat", ios::in);
  76. if(!t_file)
  77. { cout<<"\n Greshka pri otwarqne na faila za tarsene!"; return;}
  78. t_file.seekg(0L, ios::end);
  79. long int length = t_file.tellg();
  80. t_file.seekg(0L, ios::beg);
  81. if (length ==0 )
  82. { cout<<"\n Failat e prazen !! \n"; return;}
  83. else
  84. t_file.seekg((den*sizeof(struct avtokushta)), ios::beg);
  85. t_file.read((char*)(&avtokushti), sizeof(avtokushta));
  86. cout<<" avtokushta: "<<avtokushti.nomer<<endl;
  87. cout<<" avto_nomer: "<<avtokushti.marshut<<endl;
  88. cout<<" marka"<<avtokushti.fam<<endl;
  89. cout<<" godina_pr"<<avtokushti.brpat<<endl;
  90. cout<<" cena"<<avtokushti.cena<<endl;
  91. t_file.close();
  92. }
  93. else
  94. }
  95. int main(void)
  96. { avtokushta p; int izbor;
  97. do{
  98. izbor= menu();
  99.  return 0;
  100. }


Edit: Добре дошъл, моля използвай [code ][ /code] таг когато постваш код, благодаря.
« Последна редакция: 16 Декември 2013, 22:19:07 от Avalanche »