Классы C++

Классы C++
5 (100%) 1 vote




классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса

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

Классы C++ похожи на структуры, но обладают своими особенностями и преимуществами. До этого в программах мы определяли структуры и функции отдельно. В классах они объединены в одно целое, чтобы к закрытым данным класса могли обращаться только функции этого класса. Мне понравилась иллюстрация из книги

"Объектно-ориентированное программирование в С++" Р. Лафоре (купить  с доставкой по почте) «Объектно-ориентированное программирование в С++» Р. Лафоре (купить с доставкой по почте)

классы c++, классы с++ для начинающих, спецификаторы доступа privat и public, методы класса

В наших первых уроках об ООП мы будем рассматривать простые для понимания классы. Сложные примеры будут только отвлекать от важных деталей, которые касаются определения классов и объектов. В заключительном уроке о классах мы подытожим все изученное и ответим на вопросы — зачем нужны классы и в чём заключаются основные принципы ООП.

Сейчас напишем и разберём следующий код:

В строках 4 — 19 находится определение класса. Чтобы объявить класс надо использовать ключевое слово class и дать ему имя. В фигурных скобках описать его и, в конце поставить ; точку с запятой.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса

После объявления имени класса, оно становится именем нового типа данных. С этим типом будут создаваться объекты класса.

В теле класса (между фигурными скобками) могут находиться данные (переменные базовых типов и строки ), функции, принадлежащие классу, структуры, классы… Всё это чаще называют членами или полями класса. Функции, которые объявлены и/или определены в теле класса — это методы класса. Далее так их и будем называть. Просто надо запомнить: методы класса — это функции, специально созданные для работы с данными (членами) этого класса.

Рассмотрим новые для вас ключевые слова — private и public. В С++ принято защищать некоторые данные класса от внешнего вмешательства. То есть, чтобы из главной функции, например, никто не мог напрямую обратиться к этим данным через объект и внести какие-либо изменения.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса
Попытка обращения к закрытому члену класса из main-функции

Чтобы сделать данные «закрытыми» надо разместить их в поле private . По умолчанию, всё что объявлено в классе, становится закрытым от прямого доступа и доступно только для других членов или методов класса. Так что, если такие данные объявляются в самом верху тела класса, слово private можно не использовать. Чтобы объявить открытые члены класса, надо применить ключевое слово public. В этом поле зачастую находятся методы класса, которые и будут работать с приватными (закрытыми) данными. Публичные (открытые) методы и другие члены класса доступны из любой другой части кода/программы, в которой определен класс. Иногда для работы вам возможно понадобится объявить публичный член класса или приватный метод.

Обратите внимание на определение методов класса. Мы не передаем в них параметры. При этом вносим изменение в переменную number и показываем её на экран. Дело в том, что члены и методы класса находятся в одной области видимости. И методы класса свободно обращаются к данным-членам класса.

В нашем коде мы разместили определение методов прямо в теле класса, так как определение занимает очень мало места. Но чаще придётся выносить его за пределы тела класса или даже в другой файл, а в самом классе оставлять только прототипы методов. Посмотрите, как выглядит определение методов вне класса:

Чтобы указать, что функция, определенная вне класса, является именно его методом, надо как-то связать имя класса с именем этого метода. Для этого пишем сначала тип возвращаемого значения, затем имя класса, далее операцию расширения области видимости :: (двойное двоеточие), имя метода и скобки (с параметрами или без): void Number::setNumber() Потом, как обычно, следует определение тела функции в фигурных скобках.

Методы, определённые в классе, по умолчанию являются inline-функциями (встроенными функциями) в отличии от методов, определённых вне класса.

Так как класс — это некий тип, определённый программистом, то создав класс мы можем создавать объекты этого типа: Number object; Как мы обсудили раньше, мы не сможем обратиться к приватным членам класса из главной функции. Но мы легко можем с ними работать, через определённые методы класса. Так вызываем эти методы через объект и сначала присваиваем переменной number значение, а затем показываем на экран.

классы c++, классы  с++ для начинающих, спецификаторы доступа privat и public, методы класса

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

Чтобы поддержать наш сайт — нажмите на копилку и выберите любой удобный способ.

Рассылка новых уроков по программированию:

Классы C++: 2 комментария

  1. Где-то (или здесь в описаниях классов, или раньше, в описаниях структур) нужно бы сказать, что структуры, доставшиеся C++ в наследство от C, и классы — это одно и то же.
    Только по умолчанию для всех членов структуры область видимости определена как public, а в классах — как private. Поэтому мы в классах всегда переопределяем видимость каких-то членв (public, protected) — снизу вверх, от меньшего (private) к большему (public, protected). А в структурах в этом просто не возникает необходимость — сверху вниз.
    Но структуры C++, в отличие от структур C, из-за такой дуальности (с классами) могут также иметь свои собственные функции-методы.

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

Код размещайте в тегах: <pre class="lang:c++ decode:true ">YOUR CODE</pre>