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.
- Используем модификатор публичного доступа, чтобы пометить переменные, которые мы собираемся создать, как общедоступные.
- Объявите переменную стоимость типа данных double.
- Объявите целочисленную переменную с именем slots.
- Конец тела класса.
- Вызов функции main(). Логика программы должна быть добавлена в ее тело.
- Создайте объект с именем Y6 типа Телефон. Это называется созданием экземпляра.
- Создайте объект с именем Y7 типа Телефон. Это называется созданием экземпляра.
- Получите доступ к стоимости переменной/члена класса 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.
- Используйте модификатор доступа protected, чтобы пометить создаваемый член класса как защищенный.
- Создайте целочисленную переменную с именем value.
- Конец тела класса.
- Создайте новый класс с именем ChildClass, который наследует ParentClass.
- Используйте модификатор доступа protected, чтобы пометить создаваемый член класса как доступный для дочерних классов.
- Создайте функцию с именем 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(). Эта функция не определена в определении класса.
- Создайте функцию с именем print(). Эта функция определена в определении класса. Его тело было добавлено в определение класса.
- Распечатайте значение идентификатора переменной вместе с другим текстом на консоли. Обратите внимание, что это было добавлено в тело функции printid(). Он будет выполнен только при вызове функции printid().
- Конец тела функции printid().
- Конец тела класса Guru99.
- Начало определения функции printname().
- Напечатайте значение переменной имя_учебника на консоли вместе с другим текстом. Обратите внимание, что это было добавлено в тело функции printname(). Он будет выполнен только при вызове функции printname().
- Конец определения функции printname().
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте экземпляр класса Guru99 и присвойте ему имя guru99.
- Используйте приведенный выше экземпляр, чтобы присвоить значение C++ в переменную имя_учебника.
- Используйте экземпляр guru99, чтобы присвоить значение 1001 переменной id.
- Используйте экземпляр guru99 для вызова функции printname() .
- Вызовите команду end (конечная строка), чтобы вывести на консоль новую пустую строку.
- Используйте экземпляр guru99 для вызова функции printid().
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main().
Конструкторы и деструкторы
Что такое Конструкторы?
Конструкции — это специальные функции, инициализирующие объекты. 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.
- Используйте модификатор публичного доступа, чтобы пометить участника, которого мы собираемся создать, как общедоступного.
- Создайте конструктор для класса.
- Текст, выводимый на консоль при вызове конструктора. Конец - это C++ ключевое слово, которое означает конечную строку. Он перемещает курсор мыши на следующую строку.
- Конец тела конструктора класса.
- Создайте деструктор класса.
- Текст, выводимый на консоль при вызове деструктора. Конец - это C++ ключевое слово, которое означает конечную строку. Он перемещает курсор мыши на следующую строку.
- Конец тела деструктора.
- Конец тела класса.
- Вызовите функцию main(). Логику программы следует добавить в тело этой функции.
- Создайте объект класса и дайте ему имя a. Будет вызван конструктор.
- Создайте целочисленную переменную с именем p и присвойте ей значение 1.
- Создайте блок операторов if, используя переменную p.
- Создайте объект класса и дайте ему имя b. Будет вызван деструктор.
- Конец тела оператора if.
- Конец тела функции main().
Резюме
- C++ является объектно-ориентированным.
- Классы формируют основные особенности C++ что делает его объектно-ориентированным.
- A C++ класс объединяет данные и методы для управления данными в одно целое.
- Класс — это проект объекта.
- Классы определяют форму объекта.
- Данные и методы, содержащиеся в классе, называются членами класса.
- Для доступа к членам класса вам следует использовать экземпляр класса.
- Чтобы создать класс, мы используем ключевое слово class.
- Функции-члены класса могут быть определены внутри или вне класса.