Пояснения и примери:
Поясненията са в съвсем съкратен вид, и не трябва да се разглеждат като изчерпателен материал, а единствено като обяснение на по-съществените понятия, необходими за решаването на конкретните задачи.
- Класове:
Клас = данни + методи за тяхната обработка.
Данните са стандартни ( int, float, char и пр., указатели, масиви) или потребителски типове данни. Обикновено, те трябва да са видими (достъпни) само в рамките на класа, затова се дефинират в 'private' раздела на класа.
Методите са функции, които работят директно с данните на дадения клас. Съществена разлика между метод и обикновена функция е факта, че метода има достъп до скритите (private) данни на класа, докато функциите нямат. Именно чрез методите се осъществява достъп до данните на класа от главната програма. Поради това методите се декларират в 'public'раздела на класа, тъй като те трябва да бъдат видими извън класа.
Пример:
// Клас, описващ математическото понятие дроб, като нещо, което се състои от: // числител - цяло число, // знаменател - цяло число, // възможност да бъде прочетено от клавиатурата, // възможност да бъде изписано на екрана.
class drob { int ch; int zn; public: read_drob(); print_drob(); };
В така дефинирания клас, действията, които може да извършваме с една дроб са единствено : четене от клавиатура и изписване на екрана. Тези действия ще се реализират от методите read_drob() и print_drob(), които може да дефинираме като:
drob::read_drob(){ cout<<"Vyvedete chislitelya na drobta: "; cin>>ch; //знаменателят не може да бъде 0 => do { cout<<"Vyvedete znamenatelya na drobta: "; cin>>zn; } while (zn==0); };drob::print_drob(){ cout<<endl<<"Vyvedenata ot vas drob e: "<<ch<<'/'<<zn<<endl; }; - Обекти:
Класовете в С++ по същество представляват нов тип данни. След като сме дефинирали класа drob и неговите методи може да работим с променливи от тип drob в нашата програма по същия начин, по който работим с променливи от стандартните типове данни (int, float, double, char и пр.).
Например:
int x; //заделя 4B за променливата x drob d; // заделя 8B за променливата d (или иначе казано: за обекта d на класа drob)
Ето как, най-общо, ще изглежда оперативната памет след горните дефиниции:

Променливи от даден тип клас се наричат обекти
на дадения клас. Казва се, че обектите са екземпляри
на класовете.
- Достъп до членовете (данни и методи) на обект:
След като сме създали обект от даден клас, за да работим с него, ние трябва да можем да извикваме неговите методи, или ако има публични данни, да четем/записваме стойности от/в тях.
Достъпа до метод или данна на обект се извършва чрез оператора точка (.)Нека е дадена следната дефиниция на класа Box, който описва понятието кутия като съвкупност от стойности за дължината, широчината и височината на кутията, плюс методи за въвеждане/извеждане на тези стойности, както и метод за изчисляване на обема на кутията.
class Box { public: //данни: int length; //дължина int width; //широчина int height; //височина //методи: void read_box(); //метод за въвеждане на размерите на кутията от потребителя void print_box(); //метод за изписване на размерите на кутията на екрана int volume(); //метод, който изчислява обема на кутията }; int main() { Box b; // b е обект на класа Box b.length=20; //задаваме стойност за дължината на b b.width=40; //задаваме стойност за широчината на b b.height=40; //задаваме стойност за височината на b b.print_box(); //извикваме метода print_box() за обекта b }
Забележете, че в случая данните са декларирани в public секцията на класа => достъпа до тях от главната програма е възможен.
Задачи за упражнение
Задача:
Програма, която дава възможност на потребителя да въведе две дроби и извежда на екрана сумата от тези две дроби. Дробите се представят като обекти на клас drob, с необходимите методи за въвеждане и извеждане. Сумирането се извършва от функция - sum_drob()
Примерно решение:
#include "iostream.h" ////////////////////////////////////////////////////////////////////////////////////////////////// // ---------------- Дефиниция на класа drob ----------------------- // class drob { int ch; //числителя на дробта int zn; //знаменателя на дробта public: int get_ch(); //метод за достъп до числителя int get_zn(); //метод за достъп до знаменателя void set_ch(int); //метод за запис на цяло число в числителя void set_zn(int); //метод за запис на цяло число в знаменателя void read_drob(); //метод за въвеждане на дроб от клавиатурата void print_drob(); //метод за изписване на дроб на екрана }; ////////////////////////////////////////////////////////////////////////////////////////////////// // ----------- Дефиниции на методите на класа drob ------------ // // //дефиниция на метода get_ch() : int drob::get_ch(){ return ch; }; //дефиниция на метода get_zn() : int drob::get_zn(){ return zn; }; //дефиниция на метода set_ch() : void drob::set_ch(int c){ ch=c; }; //дефиниция на метода set_zn() : void drob::set_zn(int z){ zn=z; }; //дефиниция на метода read_drob() : void drob::read_drob(){ cout<<"Vyvedete chislitelya na drobta: "; cin>>ch; // Знаменателят не може да бъде 0 => do { cout<<"Vyvedete znamenatelya na drobta: "; cin>>zn; } while (zn==0); }; //дефиниция на метода print_drob() : void drob::print_drob(){ cout<<ch<<'/'<<zn<<endl; }; ////////////////////////////////////////////////////////////////////////////////////////////////// //дефиниция на функцията sum_drob(): drob sum_drob(drob d1, drob d2) { drob res; // дробта, която ще върнем като сума res.set_ch( d1.get_ch() * d2.get_zn() + d2.get_ch() * d1.get_zn() ); res.set_zn( d1.get_zn() * d2.get_zn() ); return res; } ////////////////////////////////////////////////////////////////////////////////////////////////// // -------------------- Главна програма ----------------------- // // int main(){ drob a,b; cout<<"Vyvezhdane na 1-ta drob:"<<endl; a.read_drob(); cout<<endl<<"Vyvezhdane na 2-ta drob:"<<endl; b.read_drob(); drob res; res=sum_drob(a,b); cout<<endl<<"Sumata na dvete drobi e: "; res.print_drob(); return 0; };