С++ для начинающих. Классы. Первое знакомство

  • Класс есть структура, в которой доступ по умолчанию private.
  • Класс — это собственный тип данных.
  • Класс — это некоторая идея еще не существующего объекта, в которой воедино собраны все детали, все свойства и все нужные действия необходимые для будущего объекта.
  • Создается класс с помощью слова class (struct,union).
  • В классе class модификатор доступа по умолчанию private:
  • В классе struct модификатор доступа по умолчанию public:
  • То, что описано внутри public, доступно по всей программе, а то, что написано внутри private, доступно только внутри класса.
  • Функции внутри класса называют методами класса или, более правильно, функциями-членами класса.
  • Объект — это экземпляр класса.
  • Объект есть воплощение вашей идеи, описанной в классе, во что-то реально существующее.
  • Доступ вовнутрь класса осуществляется задействованием названия объекта с применением к нему операции .

     

    Схематично: Название_Объекта.Название_нужной_части_класса
 
Знакомство с классами всегда происходит сложно у большого числа студентов.
  • В стандарте C++ под классом (class) подразумевается пользовательский тип, объявленный с использованием одного из ключевых слов classstruct или union.
  • Под структурой (structure) подразумевается класс, определённый через ключевое слово struct; под объединением определённый через ключевое слово (union).
Для знакомства с классами я решил использовать обычное сложение двух чисел типа int.

 

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

 

  • Задача: Сложить два числа через классы в C++
Шаг первый: пишем пустую программу.

 

 

Шаг второй: объявляем класс.

 

 

Шаг третий: подгатавливаем класс, описывая внутри заявленного класса всё нужное для его работы.

 

 

Шаг четвёртый: работа с классом.

 

 

Теперь я подробнее расскажу про важные моменты в этом коде.

 

  • Что такое класс и зачем он вообще нужен?

     

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

 

 

Создается класс с помощью слова class, за которым следует открывающаяся и закрывающаяся фигурные скобки. После закрывающейся фигурной скобки обязательно ставится точка с запятой. Внутри фигурных скобок пишется вся информация для класса. Создание пустого класса продемонстрировано на втором шаге.
После создания пустого класса, внутри его ему прописывается вся информация для выполнения поставленной задачи.
Одна из особых сложностей в понимании новичками классаов — использование ключевых слов privateprotected и public. В настоящий момент, в момент ознакомления, ключевое слово protected можно опустить: оно имеет смысл при наследовании, эту тему вы будете тзучать потом. Поэтому разберём private и public.
private и public — это ключевые слова, помогающие разделять доступ к внутренностям класса. Называются эти ключевые слова модификаторами доступа.
Что описано под private доступно только внутри класса. То, что описано под public, доступно по всей программе. Чем-то очень похоже на локальные и глобальные переменные.
Модификатор доступа в классе по умолчанию private, поэтому слово private в начале класса писать не обязательно. Ниже показаны две равнозначные записи:

 

 

 

 

Главный вопрос: "Что прописывать в private, а что в public?". Попробую описать.

 

  • В private стоит прописывать все детали вашей конструкции, а в public только те функции и те данные, доступ к которым должен как-то происходить из функций вне класса.
На третьем шаге было определено так, что к деталям я отнёс переменные x и y. Поскольку они детали механизма моего будущего объекта, то доступа им на всю программу я не дал, прописав их в секции private (по умолчанию private, поэтому явно не написано). Вместе с этим, мне понадобилось описать две функции: одна обеспечивает ввод чисел, вторая складывает числа. Как ни крути, логично, что доступ к этим функциям мне нужен извне класса, поэтому я сделал обе функции доступными для всей программы. Т. е. из любого места программы я могу вызвать любую из этих функций и или ввести значения в переменные, сокрытые внутри класса, или выполнить расчёт суммы переменных, сокрытых внутри класса.
Так как класс всего-лишь идея, а конечной нашей целью является нечто существующее, основанное на этой идее, идею нужно воплощать в жизнь. Чтобы дать жизнь идее, нужно объявить объект.

 

  • Объект — это экземпляр класса.
Если у вас есть класс, но нет объекта, то вы как депутат голословный пустословите и обещаете, но на практике дел не делаете. Чтобы не быть "пустословом" обязательно создать объект, т. к. работать вы будете через этот объект. На четвертом шаге был приведён пример создания объекта.
По сути своей класс есть структура.

 

  • Отличается класс от структуры только модификатором доступа по умолчанию. В С++ у структуры по умолчанию public, а у класса private.
Чтобы обратиться к элементу внутри класса, нужно задействовать название объекта, воплотившего класс, и через точку написать название элемента, к которому обращаемся. Свободный доступ такого вида из вне класса возможен только для элементов класса, написанных в секции public.
На четвёртом шаге произошло обращение к функции, находящейся внутри класса, к функции summa. Обращение произошло через созданный объект. Поскольку две функции, описанные в классе, размещены в секции public, то в любом месте программы всегда можно задействовать объект для их вызова.

 

Первая функция — ввод данных. При вводе данных я вывожу на экран нужные для ясности диалоговые сообщения и считываю с клавиатуры нужные числа. Введённые числа запоминаются в переменные x и y, объявленные внутри класса. Напоминаю, что непосредственного доступа к этим x и y из программы у меня нет. Функция, описанная внутри класса и задействованная, выступает в роли посредника.
Вторая функция — сложение двух чисел. Вы прекрасно видите, что никаких аргументов в функцию я не передавал. Внутри класса я использовал переменные x и y, просто использовав названия воспроизвёл сложение.

 

Во время ввода данных введённые значения присвоились в переменные x и y, сокрытые классом. После этого присвоения любые функции того же класса могут свободно работать с переменными, как если бы эти переменные были самыми обычными, но любые функции классу не принадлежащие свободного доступа к этим переменным через объект класса иметь не будут.

 

 

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

 

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

Обратная связь

Интересуют вопросы реализации алгоритмов, программирования, выбора электроники и прочая информация, постараюсь осветить в отдельных статьях

пишите мне на netdm@mail.ru