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

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

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

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

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

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

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

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

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

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

Создается класс с помощью слова class, за которым следует открывающаяся и закрывающаяся фигурные скобки. После закрывающейся фигурной скобки обязательно ставится точка с запятой. Внутри фигурных скобок пишется вся информация для класса. Создание пустого класса продемонстрировано на втором шаге.
После создания пустого класса, внутри его ему прописывается вся информация для выполнения поставленной задачи.
Одна из особых сложностей в понимании новичками классаов — использование ключевых слов private, protected и 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.
Подводим итоги:

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

    Схематично: Название_Объекта.Название_нужной_части_класса
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

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

  • Anonymous говорит:

    Наконец-то кто-то все объяснил подробно и доходчиво, а то все уроки для начинающих сводятся к "вот класс, тут все просто. Вываливаем на страницу листинг без комментариев. Видите, все просто и понятно, урок окончен".




    9



    0
  • Anonymous говорит:

    Да, так и сводят. Спасибо




    0



    0
  • Kazan_siti говорит:

    Да, самое простое и лучшае объяснения!Спасибо огромное,теперь все понятно!




    0



    0
  • WilsoN говорит:

    отличная статья! сразу и по делу, без зауми и лишних слов! то что нужно
    автору респект и процветания)))




    0



    0
  • иван говорит:

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




    0



    0
  • Noname говорит:

    ну как тут не поблагодарить автора????

    Спасибо! Сразу появилось желание прочитать все ваши уроки!




    0



    0
  • Сергей говорит:

    Все супер! Идеальный урок, спасибо автору 😉 пойду читать остальные уроки..




    0



    0
  • Doc_AlekS говорит:

    коменты один и тот же пишет??? ))))




    0



    0
  • краз говорит:

    Отличнейшый урок по класах просто и понятно 😉




    0



    0
  • Lilu говорит:

    Спасибо огромное! Благодаря вашему сайту я поняла суть класса. Как правильно начинать работать с классами и как правильно разграничить основную программу, заголовочный файл и файл-реализацию. Ваша помощь НЕОЦЕНИМА!!! Ведь главное разобраться в первый раз, а потом наращивать опыт!!!




    0



    0
  • Lilu говорит:

    Спасибо огромное!!!




    0



    0
  • Аноним говорит:

    А ну что могу сказать подводя итоги, не плохая статья даже очень ни чего скажем на 4 с минусом прокатит под пиво.
    Да ладно классная статья спасибо большое!!!




    0



    0
  • Maddison говорит:

    Аааа ну что же подводя итоги скажу, что статья не плохая такая знаете 4 с минусом и то под пиво.
    Да ладно классно доходчиво на самом деле написано СПАСИБО!!!




    0



    0
  • Александр говорит:

    Отличная статья, автору огромное СПАСИБО)




    0



    0
  • МатвейПрогер228 говорит:

    Автору огромнейший респект! Только благодаря ему я понял эти классы буквально минут за 12!




    0



    0
  • Андрей говорит:

    спасибо автору!




    0



    0
  • Аноним говорит:

    У меня код не работает. Пишет «идентификатор не объявлен».




    0



    0
  • не панимаюю!!!!!!!!!!!!!!!!!!!!!!!!!1




    0



    0
  • не панимаюю бред ваще!! фу




    0



    0
  • Алексей говорит:

    Кто не понимает начинайте со структур. Материал изложен идеально как для новичка… сижу и сам прозреваю, что ж я с первого раза то не понял ))))




    0



    0
  • Stan говорит:

    Усё понятно ,спасибо )




    0



    0
  • Andrii говорит:

    Функции внутри класса называют методами класса или полями класса (это я не писал, но знать надо)
    насколько я знаю поле класа ето вроде переменная? разве нет?




    0



    0
  • Аноним говорит:

    Не понятно ни хреееена!((




    0



    0
  • Сергей говорит:

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




    0



    0
    • admin говорит:

      Чтобы был выбор в музеях.
      Станете ли Вы говорить "из музея такого-то адреса принесите в музей такого-то адреса картину такого-то адреса", когда можно сказать, что "из музея А нужно принести в музей Б картину X"

      Название класса — это тип.
      Объект — это конкретная сущность такого типа.

      Создайте из одного имени два и более независимых конкретных адреса.

      Название класса — это описание, чертёж.
      А объект класса — это воплощение чертежа.




      0



      0
  • Двнил говорит:

    Спасибо огромное.Наконец-то я понятно что это такое и как оно работает.Респект автору.




    0



    0
  • Тимофей говорит:

    Спасибо!!! Вы единственный сайт на котором я смог найти доходчивое объяснение классов!




    0



    0

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

Ваш e-mail не будет опубликован.

70 + = 79

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/maks-shlee/qt-5-3-professionalnoe-programmirovanie-na-c-19236076/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Ревнивая жена прочитала сообщения мужа в Фейсбуке и лайкнула его сковородкой.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок