классы в C++

Классы в C++: руководство для начинающих!

Всем привет!  Объекты очень важная вещь в программировании, которая может облегчить решения многих задач. Например нужно вести дневник пользователя: год рождения, имя, фамилия, местожительство, все это можно продолжать еще очень долго. Поэтому, как и другие языки программирования C++ обзавелся — классами.

Как создать класс

Чтобы объявить класс нужно использовать данную конструкцию:

Обычно <имя класса> прописывают с заглавной буквы. Также в конце обязательно должна присутствовать точка с запятой (;).

Что такое класс

Это абстрактный тип данных. Он сочетает в себе два функционала:

  • Первая — это структура, в которой можно хранить различные типы данных: массивы, переменные, функции.
  • Вторая — возможность пользоваться объектно-ориентированным программированием (ООП — об этом ниже).

Создав класс можно создать его экземпляр — объект. Объект — это функционирующий прототип класса, которому можно задавать свойства и вызывать методы.

класс примеры c объектами

У каждого вами созданного класса могут быть свойства и методы. Свойства — это все что может хранить информацию, которую вы потом можете заполнять (переменные, массивы и т.д.).

Так свойства класса Worker (рабочий) может иметь — имя, производительность (полезность работы) за 6 месяцев, среднюю производительность.

Методы — это обычные функции, в функционале которых можно использовать свойства.

Чтобы обратится к свойствам и методам класса нужно перед названием имени свойства поставить точку ..

Что такое ООП

Раньше программистам приходилось весь функционал программы записывать в одном файле. Что в будущем неизбежно приводило к путанице из-за нескольких сотен и даже тысяч строк. А с приходом классов появилась возможность отделять любую часть программы в отдельный файл.

Например один файл отвечает за инициализацию введенных данных, другой за считывание производительности. Таким образом стала возможным структурировать программу.

В ООП входит такие свойства:

  • Инкапсуляция — это возможность задавать разную область видимости определенной части класса .
  • Наследование — это свойство создавать новый класс на базе старого. Такие классы называют потомками, например, есть класс магазин, на базе которого можно создать потомки продуктовый_магазин, магазин_одежды (не обращайте внимание, что название на русском языке).
  • Полиморфизм — возможность создать объекты с одинаковым интерфейсом, но с разной их реализацией. Например, есть три класса треугольник, круг и квадрат. У каждого из них есть метод SquarePlis(), который вычисляет площадь фигуры. Но для каждого класса функция реализована по-разному.
  • Абстракция — это возможность выбирать только те свойства или функции, которые нам необходимы. Например, при создании класса про работника понадобится указать его имя, возраст, образование, но никак его цвет волос, глаз, рост и тому подобное.

Спецификаторы доступа public и private

Для разграничение содержимого класса, например которое пользователю лучше не трогать, были добавлены спецификаторы доступа public, private и protected (о нем пойдет речь в следующем уроке про наследование). Это и есть инкапсуляция, которую мы упоминали выше.

  • public — дает публичный доступ, содержимому, которое в нем указано. Так можно обратится к любой переменной или функции из любой части программы.
  • private — запрещает обращаться к свойствам вне класса. Поэтому под крылом этого доступа часто находятся именно объявления переменных, массивов, а также прототипов функций.Оперировать его содержимым можно только из методов класса. Получается все преобразования: добавление, вычитание нужно будет делать в функции (их еще называют set и get функциями).

  • В строке 5: используем функцию set_avarage_AP() для установки нового значения avarage_AP.
  • В строке 13: находится функция get_avarage_AP(), которая передает значения avarage_AP.

Если отсутствуют права доступа, то по умолчанию будет стоять доступ private.

Размещать права доступа можно в разном порядке, но лучше сделать свою систему которой вы будете придерживаться в будущих проектах.

Функции get и set классов

При создании класса обычно создают функции в названии которых присутствуют слова set и get.

  • set — в ней инициализируют свойства класса.
  • get — выводит свойства конечному пользователю.

Пример использования классов

Давайте используем созданный класс на практике создав карточку об одном работнике, например Иване. Класс разместим в файле workers.h, который подключим к главному файлу main.cpp таким образом #include "workers.h".

В строках 19-34: находятся set и get функции для инициализации наших свойств. Вот какие именно:

  • get_name() — считывает имя работника.
  • get_academic_perfomence() — считывает успеваемость на работе за шесть месяцев.

Функции set имеют такое же название, только вместо get — set.

А вот как выглядит main.cpp

Для создания объекта employee мы указали класс Worker.

  • В строках 14 — 21: считываем пользовательские данные.
  • В строках 23- 24: отсылаем полученные данные классу (функциями set).
  • Вычисляем среднюю успеваемость вызвав функцию discover_avarage_AP() в строке 26.
  • В строках 28 — 29: выводим все свойства: имя, фамилию, возраст, средний балл.

employee это журнал всего лишь для одного работника, если нам потребуется вести такие журналы всей компании, то придется создать для каждого человека свой объект.

employee.cpp
Your name: Иван
Your academic performance for 6 months:
1) 3
2) 4
3) 5
4) 5
5) 3
6) 4
Иван
Avarage academic performance: 4
Process returned 0 (0x0) execution time : 0.010 s
Press any key to continue.

Как создать массив объектов

Кроме создания единичного объекта класса можно создать целый массив объектов. Нужно всего лишь в конец создаваемого объекта добавить его количество ([n]).

Здесь мы просим пользователя ввести имя для второго работника. Далее вводим введенное имя в объект employee[2] с помощью функции set_name().

 Вынесение методов от логики

Давайте отделим реализацию всех методов отдельный файл.

А вот файл с логикой класса.

Только что мы применили один из фундаментальных принципов объектно ориентированного программирования — абстракция данных. Если ваш класс будут применять в своих целях, им не нужно знать, как реализована какая-то в нем функция. Например, можно для вычисления средней успеваемости применить функцию discover_avarage_AP(), и даже не вдаваться в ее принцип работы.

В одной из прошлых статей мы разбирали работу пространства имен — namespace. Когда работают несколько программистов над проектом часто случается, что один программист не знает, что уже создан класс или функция с таким именем. Именно в таких случаях помогает префикс :: который сигнализирует, что эта функция или переменная принадлежит именно к этому классу.

Поэтому перед каждой функцией стоит данный префикс.

Инициализация объектов с помощью указателей

Когда обычным образом создаем объект мы копируем память компьютера, что не есть хорошо. Поэтому лучше выделять память в куче с помощью указателя. Если уж быть вообще правильным то в конце программы нужно удалять каждый созданный объект.

Чтобы создать объект с помощью указателя необходимо использовать конструкцию ниже:

Для освобождения памяти используется оператор delete:

При обращении к свойствам и методам объекта применяется такая конструкция (->):

Давайте используем данную реализацию в нашей программе.

Конструктор и деструктор класса

Конструктор — это метод, который вызывается во время создания класса. Также он имеет несколько условий для существования:

  1. Он должен называться также, как класс.
  2. У него не должно быть типа функции (bool, void …).

Деструктор — тоже функция, только уже вызывается после удаления класса. Кроме условий, которые имеет конструктор, деструктор еще должен начинаться с тильды (~).



Классы в C++

Пожалуйста, подождите пока страница загрузится полностью.
Если эта надпись не исчезает долгое время, попробуйте обновить страницу. Этот тест использует javascript. Пожалуйста, влкючите javascript в вашем браузере.

If loading fails, click here to try again

Пройдите тест и проверьте уровень усвоения материала. Напишите в комментарии сколько вы набрали очков, посмотрим кто лучший!
Начать





Комментарии к записи “Классы в C++: руководство для начинающих!”

Добавить комментарий

Ваш адрес email не будет опубликован.

  • Владимир:

    В разделе «Что такое класс», плз, исправьте аббревиатуру ОПП на ООП.
    «Вторая — возможность пользоваться объектно-ориентированным программированием (ОПП — об этом ниже).»

  • Евгений:

    Конструктор вызывается во время создания класса, а не после

  • Дмитрий:

    В файле workers.h в 26 строке объявление массива (vector v) -> (vector v)
    в этом же файле стоит указать
    «using namespace std;» (без кавычек)
    перед созданием класса, перед строкой class Worker {
    Ибо множество синтаксических ошибок повыскакивает