logo

Класи та об’єкти C++

Клас на C++ це будівельний блок, який веде до об’єктно-орієнтованого програмування. Це тип даних, визначений користувачем, який містить власні члени даних і функції-члени, доступ до яких можна отримати та використовувати, створивши екземпляр цього класу. Клас C++ схожий на план об’єкта. Наприклад: розглянемо клас Автомобілі . Може бути багато автомобілів з різними назвами та марками, але всі вони матимуть спільні властивості, як і всі 4 колеса , Обмеження швидкості , Пробіг, і т. д. Отже, тут автомобіль — це клас, а колеса, обмеження швидкості та пробіг — це його властивості.

  • Клас — це визначений користувачем тип даних, який містить елементи даних і функції-члени.
  • Члени даних — це змінні даних, а функції-члени — це функції, які використовуються для спільного керування цими змінними. Ці члени даних і функції-члени визначають властивості та поведінку об’єктів у класі.
  • У наведеному вище прикладі class автомобіль , елемент даних буде обмеження швидкості , пробіг, тощо, і функції-члени можуть бути застосування гальм , збільшення швидкості, тощо

Ан Об'єкт є екземпляром класу. Коли клас визначено, пам’ять не виділяється, але коли він створюється (тобто створюється об’єкт), пам’ять виділяється.



Визначення класу та оголошення об’єктів

Клас визначається в C++ за допомогою ключового слова class, за яким слідує назва класу. Тіло класу визначається у фігурних дужках і завершується крапкою з комою в кінці.

Клас і об’єкт C++

Оголошення об'єктів

Коли визначено клас, визначається лише специфікація об’єкта; пам'ять або сховище не виділено. Щоб використовувати дані та функції доступу, визначені в класі, вам потрібно створити об’єкти.



Синтаксис

ClassName ObjectName;>

Доступ до елементів даних і функцій-членів : Доступ до членів даних і функцій-членів класу можна отримати за допомогою оператора крапка (‘.’) з об’єктом. Наприклад, якщо назва об'єкта є об'єкт і ви хочете отримати доступ до функції-члена з іменем printName() тоді доведеться писати obj.printName() .

Доступ до елементів даних

Доступ до загальнодоступних елементів даних також здійснюється таким же чином, однак об’єкт не має права доступу безпосередньо до членів приватних даних. Доступ до елемента даних залежить виключно від контролю доступу цього елемента даних. Цей контроль доступу надається модифікаторами доступу в C++. Є три модифікатори доступу: державні, приватні та захищені .

C++




javascript print



// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }>

>

>

Вихід

Geekname is:Abhi>

Функції членів у класах

Існує 2 способи визначення функції-члена:

  • Внутрішнє визначення класу
  • Визначення поза класом

Щоб визначити функцію-член поза визначенням класу, ми повинні використовувати дозвіл області:: оператор разом із назвою класу та назвою функції.

C++


javascript onclick



// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }>

>

>

Вихід

Geekname is: xyz Geek id is: 15>

Зауважте, що всі функції-члени, визначені у визначенні класу, є типовими в лінію , але ви також можете зробити будь-яку некласову функцію вбудованою, використовуючи ключове слово inline з ними. Вбудовані функції — це фактичні функції, які копіюються скрізь під час компіляції, як макрос препроцесора, тому накладні витрати на виклики функцій зменшуються.

Примітка: Оголошення а функція друга це спосіб надати приватний доступ до функції, яка не є членом.

Конструктори

Конструктори це спеціальні члени класу, які викликаються компілятором кожного разу, коли створюється екземпляр об’єкта цього класу. Конструктори мають те саме ім’я, що й клас, і можуть бути визначені всередині або поза визначенням класу. Існує 3 типи конструкторів:

C++




// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }>

коли починається q2
>

>

Вихід

Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

А Конструктор копіювання створює новий об'єкт, який є точною копією існуючого об'єкта. Компілятор надає типовий конструктор копіювання для всіх класів.

Синтаксис:

class-name (class-name &){}>

есмінці

Руйнівник це ще одна спеціальна функція-член, яка викликається компілятором, коли область видимості об’єкта закінчується.

C++




// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here>

>

>

java перетворює char на int
Вихід

Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>

Цікавий факт (рідкісна відома концепція)

Чому ми ставимо крапку з комою в кінці уроку?

Багато людей можуть сказати, що це базовий синтаксис, і ми повинні поставити крапку з комою в кінці класу, як його правило визначає в cpp. Але основна причина, чому крапки з комою є в кінці класу, полягає в тому, що компілятор перевіряє, чи намагається користувач створити екземпляр класу в кінці класу.

Так, подібно до структури та об’єднання, ми також можемо створити екземпляр класу в кінці безпосередньо перед крапкою з комою. У результаті, коли виконання досягає цього рядка, створюється клас і виділяється пам’ять для вашого екземпляра.

C++




#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }>

>

>

Вихід

Default Constructor>

Ми бачимо, що ми створили екземпляр класу Demo з іменем екземпляр, у результаті результатом, який ми бачимо, є виклик Конструктора за замовчуванням.

Подібним чином ми також можемо викликати параметризований конструктор, просто передаючи тут значення

C++




програмування на коболі
#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }>

>

>

Вихід

parameterized Constructor values-100 200>

Отже, створивши екземпляр безпосередньо перед крапкою з комою, ми можемо створити екземпляр класу.

Пов'язані статті:

  • Множинне успадкування в C++
  • Чистий віртуальний руйнівник
  • Вікторина C++