C++ Клас и обект с пример
⚡ Умно обобщение
Класове и обекти в C++ формират основата на обектно-ориентираното програмиране, където класът дефинира план от данни и функции на членове, а обектът е конкретен екземпляр, създаден от този план.

Какво е клас?
A C++ клас комбинира данни и методи за манипулиране на данните в едно. Класовете определят и формите на обектите. Данните и методите, съдържащи се в клас, са известни като членове на класа. Класът е тип данни, дефиниран от потребителя. За достъп до членовете на класа използваме екземпляр на класа. Можете да видите клас като план за обект.
Един клас може да бъде прототип на къща. Той показва местоположението и размерите на врати, прозорци, подове и т.н. От тези описания можем да построим къща. Къщата става обект. Възможно е да се създадат много къщи от прототипа. Също така е възможно да се създадат много обекти от един клас.
На фигурата по-горе имаме прототип на една къща. От този прототип създадохме две къщи с различни характеристики.
Имайки предвид идеята за клас като план, следващата стъпка е да видим как той се декларира в кода.
Декларация на класа
In C++, класът се дефинира с помощта на ключовата дума class. След това трябва да се посочи името на класа. Тялото на класа се добавя между фигурни скоби { }.
Синтаксис
class class-name { // data // functions };
- - име на клас е името, което да се присвои на класа.
- - данни са данните за класа, обикновено декларирани като променливи.
- - функции са функциите на класа.
Декларирането на името и тялото на класа естествено повдига въпроса кой може да използва всеки член.
Частни и публични ключови думи
Сигурно сте срещали тези две ключови думи. Те са модификатори на достъп.
Платен:
Когато ключовата дума private се използва за дефиниране на функция или клас, тя става частна. Такива са достъпни само от класа.
Публично:
Ключовата дума public, от друга страна, прави данните/функциите публични. Те са достъпни извън класа.
След като един клас съществува, от него могат да се създават обекти, подобно на това как променливите се създават от тип данни.
Определение на обекта
Обектите се създават от класове. Обектите на класовете се декларират по подобен начин, както се декларират променливите. Името на класа трябва да е първо, последвано от името на обекта. Обектът е от тип клас.
Синтаксис
class-name object-name;
- - име на клас е името на класа, от който ще се създаде обект.
- - име на обект е името, което ще бъде присвоено на новия обект.
Този процес на създаване на обект от клас е известен като инстанциране.
След като даден обект бъде създаден, неговите публични членове могат да бъдат достигнати директно чрез прост оператор.
Достъп до членове на данни
За достъп до публични членове на клас използваме оператора (.)точка. Това са членове, маркирани с модификатор за публичен достъп.
Пример 1
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включване на пространството от имена std в нашия код, за да използваме неговите класове, без да го извикваме.
- Декларирайте клас с име Phone.
- Използване на модификатора за публичен достъп, за да маркирате променливите, които ще създадем, като публично достъпни.
- Декларирайте променливата цена на двоен тип данни.
- Декларирайте целочислена променлива с име slots.
- Край на тялото на класа.
- Извикване на функцията main(). Логиката на програмата трябва да бъде добавена в нейното тяло.
- Създайте обект с име Y6 от тип Phone. Това се нарича инстанциране.
- Създайте обект с име Y7 от тип Phone. Това се нарича инстанциране.
- Осъществете достъп до променливата/разходите за член на клас Phone, като използвате обекта Y6. Стойността е зададена на 100.0. Цената на Y6 вече е зададена на 100.0.
- Достъп до слотовете за променливи/членове на клас Phone с помощта на обекта Y6. Стойността е зададена на 2. Слотовете за Y6 вече са зададени на 2.
- Осъществете достъп до променливата/разходите за член на клас Phone, като използвате обекта Y7. Стойността е зададена на 200.0. Цената на Y7 вече е зададена на 200.0.
- Достъп до слотовете за променливи/членове на клас Phone с помощта на обекта Y7. Стойността е зададена на 2. Слотовете за Y7 вече са зададени на 2.
- Отпечатайте цената на Y6 на конзолата заедно с друг текст.
- Отпечатайте цената на Y7 на конзолата заедно с друг текст.
- Отпечатайте броя на слотовете за Y6 заедно с друг текст.
- Отпечатайте броя на слотовете за Y7 заедно с друг текст.
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Публичните членове са отворени за външен код, но частните членове следват много по-строги правила за достъп.
Какво е частен клас?
Членовете на класа, маркирани като частни, могат да бъдат достъпни само от функции, дефинирани в класа. Всеки обект или функция, дефинирани извън класа, нямат директен достъп до такива членове. Членът на частния клас е достъпен само от функции за член и приятел.
Пример 2
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име ClassA.
- Използвайте модификатора за публичен достъп, за да маркирате члена на класа, който ще бъде създаден, като публично достъпен.
- Създайте функцията с име set_a(), която приема една целочислена стойност val.
- Създайте функция с име get_a().
- Използвайте модификатора за частен достъп, за да маркирате члена на класа, който ще бъде създаден, като частно достъпен.
- Декларирайте целочислена променлива с име a.
- Край на тялото на класа.
- Използвайте името на класа и оператора за разрешаване на обхвата за достъп до функцията get_a(). Искаме да дефинираме какво прави функцията, когато бъде извикана.
- Функцията get_a() трябва да върне стойността на променлива a, когато бъде извикана.
- Край на дефиницията на функцията get_a().
- Използвайте името на класа и оператора за разрешаване на обхвата за достъп до функцията set_a(). Искаме да дефинираме какво прави функцията, когато бъде извикана.
- Присвояване на стойността на променливата val на променлива a.
- Край на дефиницията на функцията set_a().
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте екземпляр на ClassA и му дайте име a.
- Използвайте горния екземпляр на класа и функцията set_a(), за да присвоите стойност 20 на променливата a.
- Отпечатване на текст заедно със стойността на променлива a на конзолата. Стойността на променлива a се получава чрез извикване на функцията get_a().
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Защитените членове се намират между частните и публичните, добавяйки една ключова възможност за наследяване.
Какво е защитен клас?
Членовете на класа, маркирани като защитени, имат предимство пред тези, маркирани като частни. Те могат да бъдат достъпни чрез функции в класа на тяхната дефиниция. Освен това те могат да бъдат достъпни от производни класове.
Пример 3
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име ParentClass.
- Използвайте модификатора за защитен достъп, за да маркирате члена на класа, който ще бъде създаден, като защитен.
- Създайте целочислена променлива с име value.
- Край на тялото на класа.
- Създайте нов клас с име ChildClass, който наследява ParentClass.
- Използвайте модификатора за защитен достъп, за да маркирате члена на класа, който ще бъде създаден, като достъпен за дъщерни класове.
- Създайте функцията с име setId(), която приема една цяло число x.
- Присвояване на стойността на променливата x на стойността на променливата.
- Край на дефиницията на функцията setId().
- Създайте функция с име displayValue().
- Отпечатайте стойността на променливата с име value на конзолата заедно с друг текст.
- Край на тялото на функцията displayValue().
- Край на тялото на класа с име ChildClass.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте екземпляр на ChildClass и му дайте име c.
- Използвайте горния екземпляр на клас и функцията setId(), за да присвоите стойност 21 на променливата x.
- Използвайте горния екземпляр на класа, за да извикате функцията с име displayValue().
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Освен съхраняването на данни, класът групира и функциите, които работят с тези данни.
Членски функции на класа
Функциите ни помагат да манипулираме данни. Функциите на член на класа могат да бъдат дефинирани по два начина:
- Вътре в дефиницията на класа
- Извън дефиницията на класа
Ако дадена функция трябва да бъде дефинирана извън дефиниция на клас, трябва да използваме оператора за разрешаване на обхват (::). Това трябва да бъде придружено от имената на класа и функцията.
Пример 4
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в нашата програма, за да използвате неговите функции.
- Включете файла със заглавен низ в нашата програма, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име Guru99.
- Използвайте модификатора public access, за да маркирате членовете на класа, които ще създадем, като публично достъпни.
- Създайте низова променлива с име tutorial_name.
- Създайте целочислена променлива с име id.
- Създайте функция с име printname(). Тази функция не е дефинирана в дефиницията на класа.
- Създайте функция с име printid(). Тази функция е дефинирана в дефиницията на класа. Тялото ѝ е добавено в дефиницията на класа.
- Отпечатайте стойността на идентификатора на променливата заедно с друг текст на конзолата. Обърнете внимание, че това е добавено в тялото на функцията printid(). Ще се изпълни само когато се извика функцията printid().
- Край на тялото на функцията printid().
- Край на тялото на класа Guru99.
- Началото на дефиницията на функцията printname().
- Отпечатайте стойността на променливата tutorial_name на конзолата заедно с друг текст. Обърнете внимание, че това е добавено в тялото на функцията printname(). Ще се изпълни само когато се извика функцията printname().
- Край на дефиницията на функцията printname().
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създаване на екземпляр на клас Guru99 и му давайки името guru99.
- Използвайте горния пример, за да зададете стойност на C++ към променливата tutorial_name.
- Използвайте екземпляра guru99, за да присвоите стойност 1001 на променливата id.
- Използвайте екземпляра guru99, за да извикате функцията printname().
- Извикайте командата край (краен ред), за да отпечатате нов празен ред на конзолата.
- Използвайте екземпляра guru99, за да извикате функцията printid().
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Две специални функции на членовете се изпълняват автоматично, когато даден обект бъде създаден и когато бъде унищожен.
Конструктори и деструктори
Какво е конструктор?
Конструкторите са специални функции, които инициализират обекти. C++ компилатори извикайте конструктор при създаването на обект. Конструкторите помагат за присвояване на стойности на членовете на класа. Разбира се, това е след като им е било разпределено известно пространство в паметта.
Какво е деструктор?
Деструкторите от друга страна помагат за унищожаване на обекти от клас.
Името на конструктора трябва да е подобно на името на класа. Конструкторите нямат тип връщане.
Конструкторът може да бъде дефиниран вътре или извън тялото на класа. Ако е дефиниран извън тялото на класа, той трябва да бъде дефиниран с името на класа и оператора за разрешаване на обхват (::).
Пример 5
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
Изход:
Ето екранна снимка на кода:
Code Обяснение:
- Включете заглавния файл на iostream в кода, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име ClassA.
- Използвайте модификатора за публичен достъп, за да маркирате члена, който ще създадем, като публично достъпен.
- Създайте конструктор за класа.
- Текст за отпечатване на конзолата при извикване на конструктора. Краят е a C++ ключова дума, което означава краен ред. Той премества курсора на мишката на следващия ред.
- Край на тялото на конструктора на класа.
- Създайте деструктор за класа.
- Текст за отпечатване на конзолата при извикване на деструктора. Краят е a C++ ключова дума, което означава краен ред. Той премества курсора на мишката на следващия ред.
- Край на тялото на деструктора.
- Край на тялото на класа.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте клас обект и му дайте име a. Конструкторът ще бъде извикан.
- Създайте целочислена променлива с име p и й присвоете стойност 1.
- Създайте блок оператор if, като използвате променливата p.
- Създайте клас обект и му дайте име b. Деструкторът ще бъде извикан.
- Край на тялото на израза if.
- Край на тялото на функцията main().








