C++ Клас и обект с пример
Какво е клас?
A C++ клас комбинира данни и методи за манипулиране на данните в едно. Класовете определят и формите на обектите. Данните и методите, съдържащи се в клас, са известни като членове на класа. Класът е тип данни, дефиниран от потребителя. За достъп до членовете на класа използваме екземпляр на класа. Можете да видите клас като план за обект.
Един клас е прототип за къща. Показва местоположението и размерите на вратите, прозорците, подовете и т.н. От тези описания можем да построим къща. Къщата се превръща в обект. Възможно е да се създадат много къщи от прототипа. Освен това е възможно да се създават много обекти от клас.
На фигурата по-горе имаме прототип на една къща. От този прототип създадохме две къщи с различни характеристики.
Декларация на класа
В 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;
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на 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;
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на 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;
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име ParentClass.
- Използвайте модификатора за защитен достъп, за да маркирате члена на класа, който ще бъде създаден, като защитен.
- Създайте целочислена променлива с име value.
- Край на тялото на класа.
- Създайте нов клас с име ChildClass, който наследява ParentClass.
- Използвайте модификатора за защитен достъп, за да маркирате члена на класа, който ще бъде създаден, като достъпен за дъщерни класове.
- Създайте функцията с име setId(), която приема една цяло число x.
- Присвояване на стойността на променливата x на стойността на променливата.
- Край на дефиницията на функцията setId().
- Създайте функция с име displayValue().
- Отпечатайте стойността на променливата с име value на конзолата заедно с друг текст.
- Край на тялото на функцията displayValue().
- Край на тялото на класа с име ChildClass.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте екземпляр на ChildClass и му дайте име c.
- Използвайте горния екземпляр на клас и функцията setId(), за да присвоите стойност 21 на променливата x.
- Използвайте горния екземпляр на класа, за да извикате функцията с име displayValue().
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Членски функции на класа
Функциите ни помагат да манипулираме данни. Функциите на член на класа могат да бъдат дефинирани по два начина:
- Вътре в дефиницията на класа
- Извън дефиницията на класа
Ако дадена функция трябва да бъде дефинирана извън дефиниция на клас, трябва да използваме оператора за разрешаване на обхват (::). Това трябва да бъде придружено от имената на класа и функцията.
Пример 2
#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;
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на iostream в нашата програма, за да използвате неговите функции.
- Включете файла със заглавен низ в нашата програма, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име Guru99.
- Използвайте модификатора за публичен достъп, за да маркирате членовете на класа, които ще създадем, като публично достъпни.
- Създайте низова променлива с име tutorial_name.
- Създайте целочислена променлива с име id.
- Създайте функция с име printname(). Тази функция не е дефинирана в дефиницията на класа.
- Създайте функция с име printed(). Тази функция е дефинирана в дефиницията на класа. Тялото му е добавено в дефиницията на класа.
- Отпечатайте стойността на идентификатора на променливата заедно с друг текст на конзолата. Обърнете внимание, че това е добавено в тялото на функцията printid(). Ще се изпълни само когато се извика функцията printid().
- Край на тялото на функцията printid().
- Край на тялото на класа Guru99.
- Началото на дефиницията на функцията printname().
- Отпечатайте стойността на променливата tutorial_name на конзолата заедно с друг текст. Обърнете внимание, че това е добавено в тялото на функцията printname(). Ще се изпълни само когато се извика функцията printname().
- Край на дефиницията на функцията printname().
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте екземпляр на клас Guru99 и му дайте името guru99.
- Използвайте горния пример, за да зададете стойност на C++ към променливата tutorial_name.
- Използвайте екземпляра guru99, за да присвоите стойност 1001 на променливата id.
- Използвайте екземпляра guru99, за да извикате функцията printname().
- Извикайте командата край (краен ред), за да отпечатате нов празен ред на конзолата.
- Използвайте екземпляра guru99, за да извикате функцията printid().
- Програмата трябва да върне стойност при успешно завършване.
- Край на тялото на функцията main().
Конструктори и деструктори
Какво е Конструктори?
Конструкциите са специални функции, които инициализират обекти. The C++ компилатори извиква конструктор при създаване на обект. Конструкторите помагат да се присвоят стойности на членовете на класа. Разбира се, това е след като им бъде разпределено място в паметта.
Какво е Деструктори?
Деструкторите от друга страна помагат за унищожаване на обекти от клас.
Името на конструктора трябва да е подобно на името на класа. Конструкторите нямат тип връщане.
Конструкторът може да бъде дефиниран вътре или извън тялото на класа. Ако е дефиниран извън тялото на класа, той трябва да бъде дефиниран с името на класа и оператора за разрешаване на обхват (::).
Пример 3
#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;
}
}
Изход:
Ето екранна снимка на кода:
Обяснение на кода:
- Включете заглавния файл на iostream в кода, за да използвате неговите функции.
- Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
- Създайте клас с име ClassA.
- Използвайте модификатора за публичен достъп, за да маркирате члена, който ще създадем, като публично достъпен.
- Създайте конструктор за класа.
- Текст за отпечатване на конзолата при извикване на конструктора. Краят е a C++ ключова дума, което означава краен ред. Той премества курсора на мишката на следващия ред.
- Край на тялото на конструктора на класа.
- Създайте деструктор за класа.
- Текст за отпечатване на конзолата при извикване на деструктора. Краят е a C++ ключова дума, което означава краен ред. Той премества курсора на мишката на следващия ред.
- Край на тялото на деструктора.
- Край на тялото на класа.
- Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
- Създайте клас обект и му дайте име a. Конструкторът ще бъде извикан.
- Създайте целочислена променлива с име p и й присвоете стойност 1.
- Създайте блок оператор if, като използвате променливата p.
- Създайте клас обект и му дайте име b. Деструкторът ще бъде извикан.
- Край на тялото на израза if.
- Край на тялото на функцията main().
Oбобщение
- C++ е обектно-ориентиран.
- Класовете формират основните характеристики на C++ които го правят обектно-ориентиран.
- A C++ клас комбинира данни и методи за манипулиране на данните в едно.
- Класът е план за обект.
- Класовете определят формата на даден обект.
- Данните и методите, съдържащи се в клас, са известни като членове на класа.
- За достъп до членовете на класа трябва да използвате екземпляр на класа.
- За да създадем клас, използваме ключовата дума class.
- Членските функции на класа могат да бъдат дефинирани вътре или извън клас.








