Как сделать класс c
Классы и структуры — это, по сути, шаблоны, по которым можно создавать объекты. Каждый объект содержит данные и методы, манипулирующие этими данными.
Общая форма определения класса
При определении класса объявляются данные, которые он содержит, а также код, оперирующий этими данными. Если самые простые классы могут содержать только код или только данные, то большинство настоящих классов содержит и то и другое.
Данные-члены
Данные-члены — это те члены, которые содержат данные класса — поля, константы, события. Данные-члены могут быть статическими (static). Член класса является членом экземпляра, если только он не объявлен явно как static. Давайте рассмотрим виды этих данных:
Поля (field)
Это любые переменные, ассоциированные с классом.
Константы
Константы могут быть ассоциированы с классом тем же способом, что и переменные. Константа объявляется с помощью ключевого слова const. Если она объявлена как public, то в этом случае становится доступной извне класса.
События
Это члены класса, позволяющие объекту уведомлять вызывающий код о том, что случилось нечто достойное упоминания, например, изменение свойства класса либо некоторое взаимодействие с пользователем. Клиент может иметь код, известный как обработчик событий, реагирующий на них.
Функции-члены
Функции-члены — это члены, которые обеспечивают некоторую функциональность для манипулирования данными класса. Они включают методы, свойства, конструкторы, финализаторы, операции и индексаторы:
Методы (method)
Это функции, ассоциированные с определенным классом. Как и данные-члены, по умолчанию они являются членами экземпляра. Они могут быть объявлены статическими с помощью модификатора static.
Свойства (property)
Конструкторы (constructor)
Это специальные функции, вызываемые автоматически при инициализации объекта. Их имена совпадают с именами классов, которым они принадлежат, и они не имеют типа возврата. Конструкторы полезны для инициализации полей класса.
Финализаторы (finalizer)
Вызываются, когда среда CLR определяет, что объект больше не нужен. Они имеют то же имя, что и класс, но с предшествующим символом тильды. Предсказать точно, когда будет вызван финализатор, невозможно.
Операции (operator)
Индексаторы (indexer)
Позволяют индексировать объекты таким же способом, как массив или коллекцию.
Класс создается с помощью ключевого слова class. Ниже приведена общая форма определения простого класса, содержащая только переменные экземпляра и методы:
Обратите внимание на то, что перед каждым объявлением переменной и метода указывается доступ. Это спецификатор доступа, например public, определяющий порядок доступа к данному члену класса. Члены класса могут быть как закрытыми (private) в пределах класса, так открытыми (public), т.е. более доступными. Спецификатор доступа определяет тип разрешенного доступа. Указывать спецификатор доступа не обязательно, но если он отсутствует, то объявляемый член считается закрытым в пределах класса. Члены с закрытым доступом могут использоваться только другими членами их класса.
Давайте разберем пример создания класса, описывающего характеристики пользователя:
В данном примере определяется новый пользовательский класс UserInfo, который содержит 4 поля и 1 метод, которые являются открытыми (т.е. содержат модификатор доступа public). В методе Main() создаются два экземпляра этого класса: myInfo и myGirlFriendInfo. Затем инициализируются поля данных экземпляров и вызывается метод writeInConsoleInfo().
Прежде чем двигаться дальше, рассмотрим следующий основополагающий принцип: у каждого объекта имеются свои копии переменных экземпляра, определенных в его классе. Следовательно, содержимое переменных в одном объекте может отличаться от их содержимого в другом объекте. Между обоими объектами не существует никакой связи, за исключением того факта, что они являются объектами одного и того же типа. Так, если имеются два объекта типа UserInfo, то у каждого из них своя копия переменных Name, Family, Age и Adress, а их содержимое в обоих объектах может отличаться:
Начиная изучать классы, мы подошли к важному этапу – изучению объектно-ориентированного программирования (ООП) в C++. Классы – довольно обширная тема. Поэтому я разобью её на несколько частей. Таким образом, начинающим будет достаточно просто освоить информацию и разобраться с основами этой темы.
В данном уроке мы познакомимся с синтаксисом классов C++, со спецификаторами доступа к членам (полям) класса ( private и public ). Узнаем, что такое методы класса и как обращаться к членам класса из программы.
Классы C++ похожи на структуры, но обладают своими особенностями и преимуществами. До этого в программах мы определяли структуры и функции отдельно. В классах они объединены в одно целое, чтобы к закрытым данным класса могли обращаться только функции этого класса. Мне понравилась иллюстрация из книги Объектно-ориентированное программирование в С++” Р. Лафоре
В наших первых уроках об ООП мы будем рассматривать простые для понимания классы. Сложные примеры будут только отвлекать от важных деталей, которые касаются определения классов и объектов. В заключительном уроке о классах мы подытожим все изученное и ответим на вопросы – зачем нужны классы и в чём заключаются основные принципы ООП.
Сейчас напишем и разберём следующий код:
В строках 4 – 19 находится определение класса. Чтобы объявить класс надо использовать ключевое слово class и дать ему имя. В фигурных скобках описать его и, в конце поставить ; точку с запятой.
После объявления имени класса, оно становится именем нового типа данных. С этим типом будут создаваться объекты класса.
В теле класса (между фигурными скобками) могут находиться данные (переменные базовых типов и строки ), функции, принадлежащие классу, структуры, классы… Всё это чаще называют членами или полями класса. Функции, которые объявлены и/или определены в теле класса – это методы класса. Далее так их и будем называть. Просто надо запомнить: методы класса – это функции, специально созданные для работы с данными (членами) этого класса.
Рассмотрим новые для вас ключевые слова – private и public . В С++ принято защищать некоторые данные класса от внешнего вмешательства. То есть, чтобы из главной функции, например, никто не мог напрямую обратиться к этим данным через объект и внести какие-либо изменения.
Попытка обращения к закрытому члену класса из main-функции
Чтобы сделать данные “закрытыми” надо разместить их в поле private . По умолчанию, всё что объявлено в классе, становится закрытым от прямого доступа и доступно только для других членов или методов класса. Так что, если такие данные объявляются в самом верху тела класса, слово private можно не использовать.
Чтобы объявить открытые члены класса, надо применить ключевое слово public . В этом поле зачастую находятся методы класса, которые и будут работать с приватными (закрытыми) данными. Публичные (открытые) методы и другие члены класса доступны из любой другой части кода/программы, в которой определен класс. Иногда для работы вам возможно понадобится объявить публичный член класса или приватный метод.
Обратите внимание на определение методов класса. Мы не передаем в них параметры. При этом вносим изменение в переменную number и показываем её на экран. Дело в том, что члены и методы класса находятся в одной области видимости. И методы класса свободно обращаются к данным-членам класса.
В нашем коде мы разместили определение методов прямо в теле класса, так как определение занимает очень мало места. Но чаще придётся выносить его за пределы тела класса или даже в другой файл, а в самом классе оставлять только прототипы методов. Посмотрите, как выглядит определение методов вне класса:
свойства;
методы; [деструктор] //такая же ситуация, как и с конструктором >
В общем, пока вам нужно знать, что если вы явно не задали модификатор, то он будет private (классы тоже имеют модификатор, так что учтите это). С модификатором public все значительно проще – все, что помечено этим модификатором доступно из любого места вашей программы. Часто им помечают методы и свойства, а также классы. Думаю, что с принципом модификаторов вы немного разобрались, чтобы мы могли рассмотреть дальнейший код.
Все, теперь у нас в памяти болтается экземпляр класса, который абсолютно ничего пока не умеет делать. В следующем уроке мы начнем наращивать на наш скелет мышцы и учить его что-то делать. На этом пока все.
Класс является одним из самых крупных и важных понятий и инструментов языка C++, именно он делает язык объектно-ориентированным и очень мощным. Мы очень часто пользуемся объектами и методами, ведь 99% библиотек являются просто классами! Объекты, методы, что это? Я могу привести несколько официальных определений (хотя вы сами можете их загуглить), но не буду, потому что они очень абстрактные и ещё сильнее вас запутают. Давайте рассмотрим всё на примере библиотеки, пусть это будет стандартная и всем знакомая библиотека Servo. Возьмём из неё пример Knob и разберёмся, где кто и как называется.
Итак, мы можем создать объект класса, и применять к нему методы. Какую первую мысль вызывает использование объекта? Правильно, “ой, как удобно“! Ведь мы можем создать несколько объектов Servo, и управлять каждым в отдельности при помощи одинаковых методов, но каждый объект будет обладать индивидуальным набором настроек, которые хранятся где-то внутри него. Это и есть объектно-ориентированный подход, позволяющий создавать очень сложные многоуровневые программы, не испытывая особых трудностей. Классы очень похожи на структуры, как по объявлению, так и по использованию, но класс является гораздо более мощной единицей языка: если в структуре мы под одним именем храним переменные разных типов, то в классе мы храним не только переменные, но и собственные функции класса. Функции внутри класса кстати и называются методами.
Внутри класса
Ну чтож, давайте заглянем во внутрь класса и посмотрим, как там всё устроено! Начнём с того, как объявляется класс: при помощи ключевого слова class
Очень похоже на структуру ( struct ), правда? Так и есть, и создаётся объект точно так же – по “ярлыку”:
Вы не поверите, обращение к методам и параметрам класса осуществляется точно так же, как в структурах: через оператор точка . :
Теперь давайте заглянем “под капот” класса Servo и сравним теорию с практикой: Что такое public и private ? Это спецификаторы доступа к членам класса. Открытые члены ( public ) — это члены структуры или класса, к которым можно получить доступ извне этой же структуры или класса (из скетча например). Закрытые члены ( private ) — это члены класса, доступ к которым имеют только другие члены этого же класса (только внутри класса). Есть ещё protected , но мы его рассматривать не будем, т.к. он вам вряд ли пригодится. Если освоите всё остальное – читайте про наследование классов, тема обширная и очень сложная. Собственно мы видим в “публичном доступе” все те методы, которыми можно пользоваться при работе с Servo. Это очень удобно, потому что не нужно гуглить искать документацию – всё написано в описании класса. Методы объявляются точно так же, как обыкновенные функции, мы подробно обсуждали это в предыдущем уроке. Закрытые члены в классе серво – переменные, из их названий можно понять, что они в себе хранят. Доступа к этим переменным “из скетча” мы не имеем, читать эти переменные могут только методы класса. Также на картинке выше вы могли увидеть слово конструктор – это ещё одна штука, которая может находиться в классе. Конструктор позволяет инициализировать закрытые параметры при создании объекта, и вообще по сути: конструктор – это функция, вызываемая в момент создания объекта. Давайте создадим свой класс, и на его примере разберём некоторые особенности.
Пишем класс
Я стараюсь соблюдать последовательность изложения материала, поэтому в этом уроке мы постараемся не использовать того, чего ещё не было в предыдущих. Полноценный пример по созданию класса-библиотеки выйдет отдельно, и там мы уже не будем себя ограничивать. Так что давайте сделаем класс, который хранит в себе цвет и яркость как закрытые переменные, и позволяет при помощи методов этот цвет/яркость получать или изменять.
Мы создали класс под названием Color , в котором есть конструктор и переменные _color и _bright . Что важно знать:
- Имя класса принято писать с большой буквы, чтобы отделить от переменных (которые, напомню, принято писать с маленькой)
- Имя конструктора должно совпадать с именем его класса (регистр важен!)
- Закрытые переменные принято называть, начиная с нижнего подчёркивания, _color у нас
- Конструктора может не быть, тогда компилятор сам его создаст, название будет совпадать с названием класса
Продолжаем. Давайте сделаем так, чтобы при создании объекта можно было указать значение _color . Для этого нам понадобится конструктор, который принимает параметры. То есть, как обычная функция:
Мы сделали конструктор функцией, которая принимает параметр типа byte , и присваивает его в переменную класса _color . Мы написали реализацию функции внутри класса, это важно, потому что это можно сделать и снаружи. После вызова конструктора (создания объекта) переменная color удаляется из памяти (она была локальная), но её значение остаётся в нашей _color . Хорошо. Давайте позволим пользователю установить также яркость при создании объекта. Здесь нам поможет знание о перегруженных функциях из прошлого урока.
Теперь у нас два конструктора, и при создании объекта программа сама выберет, какой использовать. Ну и раз пошла такая пьянка, вернём наш пустой конструктор, чтобы можно было создать объект без инициализации параметров:
И создадим сразу объект, нам не жалко. А вот такую кучу конструкторов наплодили – жалко! И тут нам поможет такая штука, как инициализация внутри конструктора. Смотрите, как это работает:
Один конструктор, в котором через оператор = поставлена инициализация значения локальной переменной, если она не передаётся как параметр. То есть, вызвав конструктор при создании myColor3() мы не передали параметров, и конструктор взял параметры по умолчанию, 5 и 30, и приравнял их в цвет и яркость. Также обратите внимание, что при создании myColor3 мы не ставим круглые скобки, т.к. конструктор у нас универсальный! При создании myColor(10) мы передали только цвет, 10, а яркость автоматически установилась в 30. А как не указать цвет, но указать яркость? А вот уже никак =) Только создавать новый конструктор. Давайте добавим ещё два метода – для установки и чтения текущих значений. Тут всё просто – установка по аналогии с конструктором, а чтение – просто return :
Теперь при вызове например myColor2.getColor() мы получим значение 10, как и установили при инициализации. Если вызовем myColor2.setColor(50) , то присвоим закрытой переменной _color объекта myColor2 значение 50. При дальнейшем вызове myColor2.getColor() мы получим уже 50. И точно так же это работает с остальными объектами и методом set/get Bright, который мы написали. Можете поиграться и проверить, выводя данные в порт (об этом у меня как раз следующий урок). Что тут ещё хочется добавить: не всегда удобно писать реализацию метода внутри класса, получается очень громоздко и класс перестаёт быть документацией к самому себе. Вспомните библиотеку Servo – методы объявлены, но расписаны где-то в другом месте! Это сделано в файле .cpp, об этом поговорим в уроке о создании библиотек. Сейчас давайте распишем реализацию методов вне класса – описание методов оставим внутри класса, а реализацию распишем “ниже”, в итоге класс останется чистеньким и наглядным:
Оу, что за двойное двоеточие? Двойное двоеточие :: является оператором, который уточняет область видимости имени, к которому применяется. Написав void Color::setColor … мы сообщили компилятору, что именно эта функция (метод) setColor относится к классу Color , и является собственно реализацией описанного там метода. Это означает, что у вас может быть и другая функция с таким же названием, но не относящаяся к классу Color , это очень удобно. Например вот такое пополнение не приведёт к ошибке, потому что мы объяснили компилятору, что к чему относится: первая функция – к классу Color , вторая – ни к чему, просто функция в этом документе:
Статические члены класса
Очень интересную особенность имеют статические члены класса – переменные и объекты. Если сделать член класса статическим, то он будет существовать только в одном экземпляре для всех объектов класса.
- Переменная – станет глобальной для всех созданных объектов! Также к этой переменной можно обращаться напрямую от имени класса, вообще без участия объектов. Статическая переменная класса должна быть объявлена отдельно от класса (то есть создана, как объект).
- Функция (метод) – можно обращаться к нему напрямую от имени класса, вообще без участия объектов. Важно: статический метод может изменять только статические переменные, потому что он не привязывается к объекту, то есть не знает, с переменной какого из объектов взаимодействовать!
Пример, показывающий всё вышесказанное:
Деструктор
Наряду с конструктором класса существует также деструктор (от англ. destruct – разрушать), который выполняет противоположное действие: уничтожает объект, убирает его из динамической памяти. Как и конструктор, деструктор создаётся автоматически, если не указывать его явно. Деструктор также можно объявить самостоятельно, для выполнения каких-то действий при уничтожении класса, например для освобождения динамической памяти. Деструктор объявляется точно так же, как конструктор, т.е. имя совпадает с именем класса, возвращаемого типа данных нет. Единственное отличие – тильда ~ перед именем. Рассмотрим наш класс из этого урока, у него деструктор будет ~Color(); Рассмотрим пример, заодно вспомним про область видимости переменных. Если создать объект вне функций – он будет создан глобальным, и будет существовать на протяжении всего времени работы программы. Если создать его внутри функции или блока кода – он будет существовать только в пределах этого блока, то есть переменные класса будут занимать память на протяжении выполнения этого блока кода. Рассмотрим вот такой класс:
В нём есть пустой конструктор, печатающий hello метод и деструктор. Выполним вот такой код:
В выводе порта увидим Hello и всё, потому что объект глобальный и деструктор не вызвался в процессе работы, потому что объект не уничтожался. Внесём создание объекта в блок функции setup() и посмотрим, что будет
Итак, мы с вами поэтапно создали класс и изучили большую часть особенностей работы с классами. На этом завершается раздел программирования, и начинается раздел базовых уроков Ардуино. А к классам мы ещё вернёмся, когда будем писать свою собственную библиотеку!
C++. Классы. Часть 1. Понятие класса. Объявление класса. Объект класса. Классы в среде CLR . Инкапсуляция данных в классе
Содержание
Поиск на других ресурсах:
1. Основные понятия объектно-ориентированного программирования. Классы и объекты
В свое время, процедурно-ориентированное программирование уже не обеспечивало необходимого качества написания больших программных систем. Программы разбивались (структурировались) на модули, возникала повторяемость программного кода в разных модулях (частях) программы, усложнялось тестирование (поиск ошибок), снижалась надежность программы.
В классе объявляются данные (внутренние переменные, свойства) и методы (функции), которые оперируют этими данными (выполняют работу над данными).
Класс может быть унаследован от других классов верхних уровней. Это означает, что класс может использовать часть кода других классов верхних уровней.
Также класс может быть родительским для других классов, которые наследуют его программный код.
2. Какие виды классов языка C++ можно реализовать в среде CLR ?
В среде CLR ( Common Language Runtime ) поддерживаются два вида классов:
- неуправляемые ( unmanaged ) классы. Для выделения памяти под объекты таких классов могут использоваться неуправляемые указатели ( * ) и операция new ;
- управляемые ( managed ) классы. Для выделения памяти в таких классах могут быть использованы управляемые указатели ( ^ ) и операция gcnew .
Данная тема освещает особенности использования unmanaged ( * ) классов.
Примеры, которые демонстрируют особенности использования и отличие между управляемыми ( ^ ) и неуправляемыми ( * ) классами более подробно описываются в теме:
В простейшем случае (без наследования) общая форма объявления unmanaged -класса имеет следующий вид
Ключевое слово class сообщает о том, что объявляется новый класс (тип данных). Внутри класса объявляются члены класса: данные и методы. Ключевое слово private определяет члены класса, которые должны быть закрыты от внешних методов, объявленных за пределами класса, а также объектов класса. Члены данных, объявленные с ключевым словом private , доступны только другим членам этого класса.
Ключевое слово public определяет общедоступные данные (переменные) и методы (функции) класса.
Ключевое слово protected определяет защищенные данные и методы класса, которые есть:
- доступными для методов унаследованных от данного класса;
- недоступными для методов, реализованных в других частях программы;
- недоступными для объектов (экземпляров) класса.
В пределах описания класса секции (разделы) private , protected , public могут следовать в любом порядке и в любом количестве. Например:
Инкапсуляция обеспечивает улучшение надежности сохранения данных в классе путем ввода дополнительных методов проверки этих данных на допустимые значения. Как правило, доступ к скрытым данным в классе происходит не напрямую, а через вызовы специальных методов доступа или свойств класса. Непосредственно данные размещаются в скрытой секции (разделе) класса, а методы доступа к этим данным размещаются в общедоступном разделе класса.
Классический язык C++ позволяет устанавливать доступ к членам класса с помощью трех спецификаторов: private , protected , public .
5. Какие типы доступа могут иметь члены класса? Какие различия между членами класса, объявленными с ключевыми словами private , protected , public ?
Члены класса могут иметь три основных типа доступа, которые определяются соответствующими ключевыми словами:
- private – члены класса есть скрытыми. Это означает, что доступ к ним имеют только методы, которые объявлены в классе. private-члены класса есть недоступными из унаследованных классов и объектов этого класса;
- protected – члены класса есть защищенными. Это означает, что доступ к protected-членам имеют методы данного класса и методы унаследованных классов. protected-члены класса есть недоступными для объектов этого класса;
- public – члены класса есть открытыми (доступными) для всех методов и объектов из всех других частей программного кода.
6. Может ли класс, при его объявлении, содержать только данные и не содержать методов?
Класс может быть объявлен без методов. Такие классы содержат только данные. Чтобы получить доступ к данным в классе, не содержащим методов, нужно эти данные объявить в разделе public . Классы без методов почти не применяются. Если объявить данные в разделе private , то получить доступ к членам-данным класса будет невозможно.
Пример. В данном примере объявляется класс без методов, который реализует операции над датой. Класс содержит внутренние переменные (данные), что представляют собой:
Фрагмент кода, который демонстрирует работу с классом CMyDate
7. Пример объявления пустого класса
Да, класс может быть объявлен без данных и без методов. Например, ниже объявлен класс, который не содержит ни данных ни методов.
Объект такого класса также создается.
8. Пример класса, содержащего методы (функции)
Основные преимущества классов обнаруживаются при наличии методов – членов класса. С помощью методов доступа к данным в классах можно удобно:
- инициализировать данные начальными значениями;
- осуществлять проверку на корректность внутренних данных при их задании;
- реализовывать различные варианты преобразования (конвертирования) данных;
- реализовывать организацию выделения памяти для сложных типов данных, которые реализованы в классах;
- выполнять разнообразные виды вычислений над данными.
Пример. Модификация класса CMyDate . Класс, который описывает дату и операции над ней. Операции доступа к членам класса реализованы с помощью соответствующих методов. Сами данные реализованы в разделе private .
Программный код класса
Реализация методов класса SetDate() , GetDay() , GetMonth() , GetYear()
Использование методов класса из другого программного кода (например, обработчика события в приложениях типа Windows Forms)
9. В каких частях класса и программы можно объявлять реализацию методов класса? Пример
Реализацию методов класса можно объявлять в классе и за пределами класса.
Например. В приведенном ниже программном коде объявляется класс СMyTіме . Класс содержит два метода SetTime1() и SetTime2() , которые выполняют одинаковую работу: устанавливают новое время. Тело (реализация) метода SetTime1() описывается в классе CMyTime . Реализация метода SetTime2() описывается за пределами класса. В классе описывается только прототип (декларация) метода SetTime2() .
Тело метода, который описывается за пределами класса, может быть описано в другом модулн. Как правило, в системе Microsoft Visual Studio этот модуль имеет расширение *.cpp . Сам же класс описывается в модуле с расширением *.h .
10. Какое назначение имеет оператор расширения области видимости (доступа) ‘::’ ?
11. Что такое объект класса? Какие отличия между объектом класса и объявлением класса? Объявление объекта класса
Память выделяется только тогда, когда класс используется для создания объекта. Этот процесс еще называют созданием экземпляра класса, который представляет собой физическую сущность класса.
Объявление объекта класса (экземпляра) ничем не отличается от объявления переменной:
С помощью имени имя_объекта можно осуществить доступ к общедоступным ( public ) членам класса. Это осуществляется с помощью символа ‘ . ‘ (точка).
Возможен также вариант объявления указателя на класс. Если это unmanaged -класс, то объявление имеет вид:
После такого объявления, нужно выделять память для объекта класса с помощью оператора new . Доступ к данным по указателю осуществляется с помощью комбинации символов ‘->’ точно так же как и в случае со структурами.
Например. Объявление класса Worker , описывающего методы и данные о работнике предприятия.
Из объекта можно иметь доступ только к public -членам класса. Это можно осуществлять с помощью символа ‘ . ‘ (точка) или доступа по указателю ‘->’ :
12. Какой тип доступа по умолчанию имеют члены класса в C++?
По умолчанию, члены класса имеют доступ private . Поэтому, при объявлении класса, если нужно указать private -члены класса, это слово можно опустить.
Например, пусть заданы объявления класса, который описывает пиксель на экране монитора.
По всей видимости, в начале объявления класса, раздел private отсутствует. Это означает, что члены-данные класса color , x , y есть скрытыми. При создании объекта класса и прямом доступе к ним компилятор выдаст ошибку
13. Каким образом можно реализовать доступ к private -членам класса?
Как правило, private -члены класса есть закрытыми. Это есть основное преимущество инкапсуляции. Чтобы изменять значения private -членов класса, используют методы класса, которые объявлены в public -секции. В этих методах можно изменять значения private -членов. Такой подход используется для обеспечения надежности сохранения данных в private-членах. В public-методах, которые имеют доступ к private -членам, можно реализовать дополнительные проверки на допустимость значений.
Например.
Пусть дан класс, который определяет массив из n вещественных чисел. Класс содержит два скрытых ( private ) члена данных:
- n — количество элементов массива;
- A — непосредственно массив.
Судя из логики задачи, в таком классе количество элементов массива не может быть меньше нуля ( SetN() , который устанавливает значение n , целесообразно проводить проверку на корректность значения n .
Программный код класса, который демонстрирует доступ к private -членам класса приведен ниже.
Как видно из программного кода, в классе объявляется новый элемент — конструктор класса. Это специальный метод, который используется для начальной инициализации членов данных класса. Более подробно о конструкторах и деструкторах класса описывается в темах:
Читайте также: