Создание объектов

Для объявления объекта произвольного типа используется следующая конструкция:
Эта строка объявления выполняет три функции. Во-первых, объявляется переменная myinfo, относящаяся к типу класса InfoUser. Сама эта переменная не является объектом, а лишь переменной, которая может ссылаться на объект. Во-вторых, создается конкретная, физическая, копия объекта. Это делается с помощью оператора new. И наконец, переменной myinfo присваивается ссылка на данный объект. Таким образом, после выполнения анализируемой строки объявленная переменная myinfo ссылается на объект типа InfoUser.
Оператор new динамически (т.е. во время выполнения) распределяет память для объекта и возвращает ссылку на него, которая затем сохраняется в переменной. Следовательно, в C# для объектов всех классов должна быть динамически распределена память.
То обстоятельство, что объекты классов доступны по ссылке, объясняет, почему классы называются ссылочными типами. Главное отличие типов значений от ссылочных типов заключается в том, что именно содержит переменная каждого из этих типов. Так, переменная типа значения содержит конкретное значение, а ссылочная переменная содержит не сам объект, а лишь ссылку на него.
Переменные ссылочного типа и присваивание
В операции присваивания переменные ссылочного типа действуют иначе, чем переменные типа значения, например типа int. Когда одна переменная типа значения присваивается другой, ситуация оказывается довольно простой. Переменная, находящаяся в левой части оператора присваивания, получает копию значения переменной, находящейся в правой части этого оператора.
Когда же одна переменная ссылки на объект присваивается другой, то ситуация несколько усложняется, поскольку такое присваивание приводит к тому, что переменная, находящаяся в левой части оператора присваивания, ссылается на тот же самый объект, на который ссылается переменная, находящаяся в правой части этого оператора. Сам же объект не копируется. В силу этого отличия присваивание переменных ссылочного типа может привести к несколько неожиданным результатам.

В качестве примера рассмотрим следующий фрагмент кода:

Когда переменная Car1 присваивается переменой Car2, то в конечном итоге переменная Car2 просто ссылается на тот же самый объект, что и переменная Car1. Следовательно, этим объектом можно оперировать с помощью переменной Car1 или Car2. Несмотря на то что обе переменные, Car1 и Car2, ссылаются на один и тот же объект, они никак иначе не связаны друг с другом.
Инициализаторы объектов
предоставляют способ создания объекта и инициализации его полей и свойств. Если используются инициализаторы объектов, то вместо обычного вызова конструктора класса указываются имена полей или свойств, инициализируемых первоначально задаваемым значением. Следовательно, синтаксис инициализатора объекта предоставляет альтернативу явному вызову конструктора класса. Синтаксис инициализатора объекта используется главным образом при создании анонимных типов в LINQ-выражениях. Но поскольку инициализаторы объектов можно, а иногда и нужно использовать в именованном классе, то ниже представлены основные положения об инициализации объектов.
Ниже приведена общая форма синтаксиса инициализации объектов:
где имя обозначает имя поля или свойства, т.е. доступного члена класса, на который указывает имя_класса. А выражение обозначает инициализирующее выражение, тип которого, конечно, должен соответствовать типу поля или свойства.
Инициализаторы объектов обычно не используются в именованных классах, хотя это вполне допустимо. Вообще, при обращении с именованными классами используется синтаксис вызова обычного конструктора.
C#. Класс. Описание класса. Объект класса. Конструктор класса. Деструктор. Ключевое слово this
Класс. Описание класса. Объект класса. Поля класса. Примеры. Ключевое слово this . Массив объектов в классе
Содержание
- 1. Что такое класс и объект класса?
- 2. Какое отличие между объявлением класса и объявлением объекта класса?
- 3. Что объявляется в классе?
- 4. Что называется полями класса?
- 5. Какие элементы языка C# могут относиться к функциям-членам класса?
- 6. Какая общая форма описания класса?
- 7. Какие существуют типы (модификаторы) доступа к членам класса?
- 8. Какие возможности доступа дает использование спаренного модификатора доступа protected internal ?
- 9. Может ли отсутствовать тип (модификатор) доступа при описании членов класса?
- 10. Примеры описания простейших классов, содержащих только данные.
- 11. Как создать объект (экземпляр класса)?
- 12. К каким типам данных принадлежат классы: к типам значения или к ссылочным типам?
- 13. Пример описания класса, который содержит данные и методы (функции).
- 14. Пример использования массива объектов класса и описания деструктора в классе.
- 15. Какие особенности использования ключевого слова this в классе?
- 16. Уровни доступности класса в сборке. Пример
- Связанные темы
Поиск на других ресурсах:
1. Что такое класс и объект класса?
Класс представляет собой шаблон, по которому определяется форма объекта. Класс подобен типам в традиционных языках программирования. Отличие состоит в том, что пользователь может создавать собственные типы (классы) в объектно-ориентированном программировании.
Если класс подобен типу в традиционных языках программирования, тогда объект класса подобен переменной. Иногда объекты называются экземплярами класса. Объект класса реализует один из возможных вариантов описания класса. При объявлении объекта класса для него выделяется память.
2. Какое отличие между объявлением класса и объявлением объекта класса?
При объявлении класса память не выделяется. Формируется только описание элементов класса.
Описание класса еще называют объявлением класса. В описании класса указываются данные и программный код. Как правило, программный код выполняет какую-то работу над данными в классе (оперирует данными в классе). При описании класса оперативная память для данных и программного кода не выделяется. Описание класса – это своего рода информация о том, какие данные есть в этом классе и какую работу (методы) выполняются над этими данными.
Если объявляется объект класса, тогда, на основе описания класса выделяется память для этого объекта. Таким образом, класс есть физической абстракцией. Физически класс будет представлен только после объявления объекта класса.
3. Что объявляется в классе?
При описании класса объявляются данные, которые он содержит, и программный код, который оперирует этими данными.
Также класс может содержать только данные или только программный код. Но при работе с классами большинство классов содержат и данные и программный код.

Данные помещаются в членах-данных, которые определяются классом, а код – в функциях-членах. В языке С# поддерживается несколько разновидностей членов-данных и функций-членов.
4. Что называется полями класса?
Члены-данные еще называются полями класса. К членам-данным относятся переменные экземпляра класса и статические переменные. Поля класса могут иметь любой допустимый в приложении тип.
5. Какие элементы языка C# могут относиться к функциям-членам класса?
К функциям-членам класса могут относиться:
- методы;
- конструкторы;
- деструкторы;
- индексаторы;
- события;
- операторы;
- свойства.
6. Какая общая форма описания класса?
Класс создается с помощью ключевого слова class . Общая форма описания класса имеет вид:
В вышеприведенном описании:
- имя_класса – имя, которое дается классу. Имя класса определяет новый тип данных. Имя класса может отвечать сущности класса. В свою очередь, класс должен определять одну (и только одну) логическую сущность;
- доступ – это тип доступа. В языке C# предусмотрены четырех модификаторы доступа: public (общедоступный член класса), private (скрытый член), protected (защищенный) и internal . Модификатор internal определяет доступность члена класса во всех членах сборки и его недоступность за пределами сборки.
- тип – тип переменной, которая есть членом класса;
- переменная1 , переменная2 , …, переменнаяN – переменные, которые есть членами класса (данными в классе);
- метод1 , метод2 , …, методN – методы, которые есть членами класса;
- возвращаемый_тип – тип, который возвращается методом класса;
- параметры – параметры методов, которые определяются в классе.
7. Какие существуют типы (модификаторы) доступа к членам класса?
Доступ к членам класса может быть пяти типов:
- private – закрытый доступ. В этом случае члены (данные или методы) класса доступны только в границах класса. Это означает, что доступ к private членам класса имеют только переменные и методы этого класса;
- public – открытый доступ. В этом случае члены класса есть доступными за пределами класса. Это означает, что public -члены класса можно использовать во всех других фрагментах кода – даже тех, что определенны за пределами класса;
- protected – защищенный доступ. Данный тип используется в случае наследственности при построении иерархии классов. В этом случае protected -члены класса есть защищенными. Такие члены класса есть открытыми в границах иерархии классов, но закрытыми за пределами иерархии классов;
- internal – определяет доступность члена класса во всех файлах сборки и его недоступность за пределами сборки. Это означает, что internal -члены класса известны только в самой программе, но не за ее пределами. Данный модификатор полезен при создании программных компонент;
- protected internal — это есть комбинация модификаторов protected и internal с использованием логической операции «ИЛИ» . Такой член класса видим в пределах класса или в унаследованных классах а также в любых методах текущей сборки. Унаследованный класс может размещаться в той же самой сборке или даже в другой сборке.
8. Какие возможности доступа дает использование спаренного модификатора доступа protected internal ?
Спаренный идентификатор доступа protected internal состоит из двух отдельных модификаторов доступа protected и internal .
Член класса, который объявлен как protected internal , доступен:
- в методах текущего класса;
- в методах вложенного класса в случае, если в классе используются вложенные классы;
- в методах производного класса ( protected );
- в методах текущей сборки ( internal ).
9. Может ли отсутствовать тип (модификатор) доступа при описании членов класса?
Ответ: да, может быть. В этом случае объявляемый член класса считается скрытым по умолчанию – private .
Пример.
10. Примеры описания простейших классов, содержащих только данные.
Пример 1. Класс, содержащий только данные. В этом примере создается новый тип MyPoint . Описывается общедоступный класс ( public ) MyPoint , описывающий точку на координатной плоскости.
Пример 2. Описание класса с именем MyBook , содержащего данные о книге.
11. Как создать объект (экземпляр класса)?
После описания класса создается новый тип. В предыдущем пункте создается тип с именем MyPoint . Объект класса описывается как обычная переменная некоторого типа.
Пример 1. Создание экземпляра объекта типа MyPoint (смотрите предыдущий пункт ).
Способ 1. Создание экземпляра объекта типа MyPoint с именем p .
Пример 2. Создание экземпляра класса типа MyBook (смотрите предыдущий пункт ) с именем b .
12. К каким типам данных принадлежат классы: к типам значения или к ссылочным типам?
Классы принадлежат к ссылочным типам. Ссылка на экземпляр класса размещается в стеке, а сам экземпляр класса размещается в куче. В случае значимых типов, экземпляр (переменная) данного типа помещается в стеке полностью.
Пример.
В данном примере в переменную p помещается адрес созданного экземпляра класса в оперативной памяти. Следующий рисунок схематично объясняет отличие между ссылочными типами и типами-значений .
13. Пример описания класса, который содержит данные и методы (функции)
Над данными в классе можно выполнять некоторую работу. Это осуществляется функциями-членами класса.
В следующих фрагментах кода описываются классы с собственными функциями.
Пример 1. Модификация класса MyPoint , содержащего координаты точек. В класс добавлены четыре новые функции-члены (методы):
- функция GetX() , возвращающая координату x ;
- функция GetY() , возвращающая координату y ;
- функция SetX() , устанавливающая координату x в новое значение;
- функция SetY() , устанавливающая координату y в новое значение.
Внутренние переменные x , y класса объявлены как private .
14. Пример использования массива объектов класса и описания деструктора в классе
В приведенном примере создается два класса. Первый типа « КНИГА » ( MyBook ), второй – массив книг MyBooks . В классе MyBooks описывается деструктор.
15. Какие особенности использования ключевого слова this в классе?
В объявлении класса все члены класса получают неявно ссылку this , которая есть ссылкой на текущий экземпляр класса. Более подробно о случаях и примерах применения this в классах описывается здесь .
Пример. Объявление класса DemoThis . В классе есть два поля. Одно поле скрытое ( private ) типа int с именем i . Второе поле общедоступно ( public ) типа double с именем d .
В классе описаны два метода с именами GetI1() и GetI2() . Эти методы возвращают значение поля i . Эти методы выполняют одинаковую работу, но доступ к полю i осуществляется по разному. То же касается и методов GetD1() и GetD2() .
В конструкторе класса DemoThis ( int , double ), получющего два параметра, ключевое слово this служит для доступа к полям (членам данных) i и d класса. Это обусловлено тем, что локальные переменные-параметры конструктора с такими же именами ( i и d ) скрывают объявленные члены данных класса.
16. Уровни доступности класса в сборке. Пример
В языке C# существует возможность скрыть класс (тип) в текущей сборке или сделать его доступным из других сборок (другого кода).
Уровень доступности класса может быть следующим:
- public – открытый уровень доступности. При объявлении класса с уровнем доступности public этот класс доступен из любого кода любой сборки;
- internal – в этом случае класс доступен в пределах текущей сборки.
Если перед словом class отсутствует ключевое слово public или internal , то по умолчанию принимается уровень доступа в пределах текущей сборки ( internal ).
Классы на языке Си
Язык программирования С и С# принадлежит к категории полноценных объектно-ориентированных языков программирования. Это указывает на то, что программу, которая будет написана на этом языке программирования, можно будет представить в виде объектов, которые связаны между собой. При этом непосредственно для описания самых объектов применяются классы.
Особенности классов
Если рассматривать язык программирования С и С++, то в них прослеживается уникальная особенность, так как они предоставляют возможность определить собственные типы данных, которые будет целесообразно применять в процессе определения самых разнообразных задач. Для процесса создания собственных пользовательских типов могут применяться структуры и перечисления. Например, структура, посредством которой можно осуществить хранение даты, будет выглядеть следующим образом:

Если же смотреть на структуры и перечисления, то они не принадлежат к категории объектно-ориентированного программирования, а представляют собой стандартный традиционный метод. В нем может происходить только процесс хранения данных. Создание и инициализация в С++11 может быть реализована следующим образом:
![]()
В том случае, если на экран необходимо вывести дату и может быть не единожды, целесообразно отдельно написать следующий код программы:

В результате ее выполнения на экран будет выведено:
![]()
Если же рассматривать объектно-ориентированное программирование, то в нем типы данных могут содержать в собственном составе не только данные, но и разнообразные функции, посредством которых можно будет осуществить работу с этими данными. В языке С++ для того, чтобы осуществить определение типа таких данных, применяется основное слово class. В процессе применения этого ключевого слова происходит процесс определения нового пользовательского типа данных под названием класс.
Классы в языке программирования С++ очень сильно похожи на структуры. Но по сравнению с ними они обеспечивают максимальную гибкость и большую мощность. По факту, следующий класс и структура будут полностью идентичными с точки зрения функционала:

Среди единственных существенных отличий, которые здесь существуют, стоит выделить слово public, которое в классе считается ключевым. Если же рассматривать одинаковые моменты, то в процессе создания классов, точно так же, как и объявления структур, не происходит процесс выделения свободной памяти. Для того, чтобы осуществить процесс применения класса, стоит объявить переменную, которая принадлежит к этому типу класса:
![]()
Переменная класса в языке программирования С++ именуется, как объект класса или же экземпляр класса. Процедура создания объекта класса приводит к тому, что происходит процесс выделения памяти для хранения конкретного объекта.
Методы классов
Помимо того, что должен происходить процесс хранения данных, в составе классов могут содержаться также и функции. Те виды функций, которые определяются в рамках конкретного класса, называются методами. Что же касается их определения, то они могут определяться, как внутри класса, так и за его пределами. Для простоты с написанием программ целесообразно определять их внутри конкретного класса.
Пример класса Date, в котором применяется метод для вывода даты выглядит следующим образом:

Если проводить сравнение с членами структуры, то точно так же и для членов (функций и переменных) классов доступ открывается посредством применения оператора выбора членов (.):

В результате выполнения программы будет получено:
![]()
Здесь стоит обратить внимание на то, что представленная программа очень сильно похожа на программу, расположенную выше, в которой применяется структура. Но и здесь все-таки можно заметить некоторые отличия. Если рассматривать версию DateStruct, то в ней необходимо было осуществить процесс передачи переменной структуры в функцию print(), которая выступала в качестве параметра.
В том случае, если бы этот процесс не был бы реализован, то функция print() просто бы не знала, какую из переменных необходимо вывести. Это привело бы к тому, что внутри функции пришлось бы прямо ссылаться на определенные члены структуры.
Если же рассматривать действие методов класса, то работают они немного по-другому. Здесь стоит обратить внимание на то, что все вызовы методов в обязательном порядке должны быть связаны с объектами, принадлежащими к конкретным классам. В том случае, когда происходит вызов today.print(), это говорит компилятору о том, что необходимо вызвать метод print(), который применяется по отношению к объекту today.
Здесь стоит еще раз разобраться с определением такого метода, как print():

Рассматривая такие элементы, как m_day, m_month и m_year, у многих возникает вопрос о том, на что они ссылаются. Здесь стоит обратить внимание на то, что каждый из них ссылается на так называемый связанный объект today.
Поэтому, в том случае, когда происходит вызов today.print(), компилятор осуществляет следующую интерпретацию:

В том случае, если бы происходит вызов метода tomorrow.print(), то в таком случае m_day осуществлял бы ссылку на tomorrow.m_day.
По сути, если рассматривать связанный объект, то его передача методу является неявной. Поэтому очень часто можно заметить, что его называют, как неявный объект. Здесь стоит также обратить внимание на один ключевой момент.
В том случае, если есть необходимость осуществлять работу с теми функциями, которые не принадлежат к категории членов класса, необходимо осуществлять процесс передачи данных в функцию явно. Это можно сделать посредством применения параметров. А в том случае, если работа происходит с методами класса, то для них можно применять неявные объекты.
Для переменных-членов специально применяется префикс m_. Это дает возможность различать параметры функции или же локальные переменные от переменных-членов, которые находятся внутри определенного класса. Полезно реализовывать этот процесс будет по следующим причинам:
- в том случае, если наблюдается переменная, в которой есть префикс m_, это указывает на то, что осуществляется процесс работы с переменными членами определенного класса;
- наличие префикса m_ также указывает на то, что если есть необходимость в поиске того, как объявлена переменная, то искать нужно непосредственно не внутри класса, а в его определении.
Здесь стоит запомнить одно простое правило, которое используется опытными программистами: написание имен классов стоит осуществлять непосредственно только с заглавной буквы. Здесь также можно обратить внимание еще на один программный код, в котором происходит процесс использования класса:

В процессе выполнения представленной программы будет получен следующий результат:

Если осуществлять процесс сравнения с обыкновенными функциями, то порядок, по которому будет происходить процесс определения методов класса, совершенно не важен.
Особенности функционирования конструктора и деструктора классов С++
Здесь в первую очередь стоит обратить внимание на то, что перед тем, как происходит процедура создания переменных (элементов) класса, в самом определении класса нет возможности задать присвоение определенных значений. В результате этого со стороны компилятора постоянно будет возникать ошибка. Поэтому есть необходимость в том, чтобы побеспокоиться о процессе создания совершенно отдельного метода.
В его качестве будет выступать специальная set-функция, которая будет способствовать такому процессу, как инициализация конкретных элементов. Здесь стоит обратить внимание на то, что в том случае, когда нужно будет, например, создать 20 совершенно разных объектов, входящих в структуру класса, придется ровно 20 раз вызывать set-функцию.
В данной ситуации на помощь может прийти так называемый конструктор класса. Он представляет собой отдельный метод класса, который применяют в том случае, когда есть необходимость в осуществлении процедуры инициализации элементов, которые входят в структуру конкретного класса.
Если же проводить сравнительную характеристику между конструктором и деструктором, то последний представляет собой специальный метод класса, который используется в том случае, когда есть необходимость в удалении всех элементов класса.
Зачастую деструктор применяется в том случае, когда в процессе создания объекта класса в конструкторе было определенно небольшой участок памяти, который необходимо очистить. В основном это осуществляется тогда, когда определенная часть программы в последующем больше не будет применяться.
Здесь также очень важно запомнить следующие особенности:
- процедуру объявления конструктора и деструктора необходимо реализовать непосредственно в разделе с наименованием public;
- в том случае, если происходит процесс объявления конструктора, то не стоит указывать тип данных того значения, которое возвращается;
- для возвращаемого значения у деструктора также нет конкретного типа данных;
- деструктору категорически запрещено осуществлять процесс передачи каких-либо параметров;
- имя конструктора и используемого класса должны быть идентичными между собой;
- в том случае, если есть необходимость, то в одном классе может быть создано одновременно несколько конструкторов. При этом имена должны быть между собой одинаковыми. По тем параметрам, которые будут передаваться, компилятор будет их различать между собой. Это будет осуществляться точно также, как и при перегрузке функции. В том случае, если в конструктор не будет осуществлено процесс передачи данных, то он будет выступать в качестве конструктора по умолчанию;
- что же касается объявления деструктора, то в классе он может быть в единичном экземпляре.
Для того, чтобы разобраться с тем, каким образом работает конструктор, можно рассмотреть следующий пример программного кода:

В результате выполнения кода, находящегося выше, появиться следующее окно:

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

В результате осуществления этой программы будет получен следующий результат:

В тот момент, когда происходит процесс завершения запущенной программы и уничтожения всех данных, в работу вступает деструктор. Осуществлять его вызов не стоит, так как он срабатывает самостоятельно. Точно так же, как и конструктор, он сработал дважды.
Перегруженный конструктор класса
Часто происходят ситуации, когда в программном коде встречается перегруженный конструктор класса. Не многие обращают на это внимание. Если же смотреть на перегрузку конструкторов, то она является полностью идентичной с перегрузкой функций.
В конкретном определяемом классе может применяться несколько конструкторов в зависимости от того, в каком количестве есть необходимость. Их имя должно быть полностью идентичным тому, которое используется у класса, но при этом отличительной для них должна быть сигнатура.
Например: один конструктор будет принимать несколько параметров, второй не будет принимать параметров вовсе, а третий будет принимать три параметра и так далее. В том момент, когда будет происходить такой процесс, как создание объектов, в качестве аргументов будут передаваться именно параметры. Это даст возможность компилятору определить факт того, какой из вариантов конструкторов стоит использовать на этапе создания конкретного объекта.
Здесь стоит рассмотреть следующий пример:


Именно этот пример очень ярко показывает факт того, для чего необходима так называемая перегрузка конструкторов. По сути, здесь все определяется тем, что у программиста будет возникать возможность осуществить выбор того метода, который в последующем будет применяться для инициализации конкретных объектов.
Здесь можно наблюдать один из наиболее часто встречаемых вариантов, по которым происходит перегрузка конструкторов. А именно конструктор, в котором есть параметры и наоборот они отсутствуют. Достаточно часто у программистов возникает необходимость одновременно использовать два вида конструкторов. На этапе каждого объявления переменных конкретного класса есть возможность в применении соответствующего способа для объявления.
В зависимости от того, сколько нужно раз, столько и можно перегружать конструктор. Но и здесь не стоит забывать о том, что должна учитываться какая-то золотая середина. Поэтому осуществлять перегрузку рекомендуется в тех случаях, где в этом есть обязательная необходимость. И здесь стоит также обратить внимание на то, что деструктор по сравнению с конструктором не может подлежать процессу перегрузки. Это связано с тем, что он не осуществляет процесс приема параметров.
Указатели на объекты в С++
Получение доступа к структуре в языке программирования С++ возможно посредством применения указателей на объекты. Среди всех понятий в языке С++ именно указатели на объекты принадлежат к категории базовых.
В том случае, если есть необходимость в получении доступа к членам объекта непосредственно через сам объект, то в этом случае стоит применить оператор «точка». Если же есть необходимость в использовании указателя непосредственно на сам объект, то здесь целесообразно применить оператор «стрелка». Процесс применения таких операторов является полностью идентичным, как и для объединений и структур.
Процесс применения указателя, направленного на объект, происходит посредством использования точно такого же синтаксиса, как и для указателей на данные, принадлежащие к прочим типам. Ниже стоит обратить внимание на пример, в котором четко проиллюстрировано, каким образом можно получить доступ к желаемому объекту посредством применения указателя:

Здесь стоит обратить внимание на то, что получение адреса объекта осуществлено посредством применения оператора, отвечающего за взятие адреса. Естественно, для того чтобы ознакомиться с особенностями работы с классами, стоит изучить большое количество информации, которая для разных версия языка программирования С может немного изменяться.
Классы и объекты на C++
В этом руководстве мы узнаем об объектах и классах и о том, как их использовать в C++, с помощью примеров.
Предположим, нам нужно сохранить длину, ширину и высоту прямоугольной комнаты и вычислить ее площадь и объем.
Чтобы справиться с этой задачей, мы можем создать три переменные, например длину, ширину и высоту, а также функции calculateArea() и calculateVolume().
Однако в С++ вместо того, чтобы создавать отдельные переменные и функции, мы можем соединить эти связанные данные и функции в одном месте (путем создания объектов). Эта парадигма программирования известна как объектно-ориентированное программирование.Но прежде чем мы сможем создавать объекты и использовать их в C++, нам сначала нужно узнать о классах.
Что такое класс в C++?
Класс в C++– это план объекта. Мы можем думать о классе как о эскизе (прототипе) дома. Он содержит все подробности о полах, дверях, окнах и т. д. На основе этих описаний мы строим дом. Дом-это объект.
Как создать класс?
Класс определяется в C++ с помощью ключевого слова class, за которым следует имя класса. Тело класса определяется внутри фигурных скобок и заканчивается точкой с запятой в конце.
Здесь мы определили класс с именем Room.
Переменные длина, ширина и высота, объявленные внутри класса, называются членами данных. Кроме того, функции calculateArea() и calculateVolume() известны как функции-члены класса.
Когда класс определен, определяется только спецификация для объекта, память или хранилище не выделяются.
Синтаксис для определения объекта
Мы можем создавать объекты класса Room (определенные в приведенном выше примере) следующим образом:
Здесь два объекта room1 и room2 класса Room создаются в sampleFunction(). Аналогичным образом, объекты room3 и room 4 создаются в main().
Как мы видим, мы можем создавать объекты класса в любой функции программы. Мы также можем создавать объекты класса внутри самого класса или в других классах.
Кроме того, мы можем создавать столько объектов, сколько захотим, из одного класса.
Мы можем получить доступ к элементам данных и функциям-членам класса с помощью оператора . (точка). Например,
Это вызовет функцию calculateArea() внутри класса Room для объекта room2.
Аналогично, к элементам данных можно получить доступ в виде:
В этом случае он инициализирует переменную длины room1 до 5.5.
В этой программе мы использовали класс комнаты и ее объект room1 для расчета площади и объема комнаты.
В main() мы присвоили значения длины, ширины и высоты с помощью кода:
Затем мы вызвали функции calculateArea() и calculateVolume() для выполнения необходимых вычислений.
Обратите внимание на использование ключевого слова public в программе. Это означает, что участники являются общедоступными и могут быть доступны в любом месте программы.
В соответствии с нашими потребностями мы также можем создавать частные члены, используя ключевое слово private. К закрытым членам класса можно получить доступ только изнутри класса. Например,
Здесь a и function1() являются частными. Таким образом, они не могут быть доступны из-за пределов класса.
С другой стороны, b и function2() доступны отовсюду в программе.
Использование public и private в классе C++
Приведенный выше пример почти идентичен первому примеру, за исключением того, что переменные класса теперь являются частными.
Поскольку переменные теперь являются частными, мы не можем получить к ним доступ непосредственно из main(). Следовательно, использование следующего кода будет недопустимым:
Вместо этого мы используем общедоступную функцию getData() для инициализации частных переменных с помощью параметров функции double len, double brth и double hgt.
