C класс

C класс

Урок 113. Классы. Объекты и способы классов.

Обновл. 15 Ноя 2018 |

Хотя C++ предоставляет ряд базовых типов данных (к примеру: char, int, long, float, double и т.д.), которых бывает довольно для решения относительно обычных заморочек, для решения сложных заморочек функциональности этих обычных типов может не хватать. Одной из более нужных фич языка C++ является возможность определять свои собственные типы данных, которые будут лучше соответствовать в решении определенных заморочек. Вы уже лицезрели, как перечисления и структуры могут употребляться для сотворения собственных пользовательских типов данных.

К примеру, структура для хранения даты:

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

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

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

В C++ классы очень похожи на структуры, кроме того, что они обеспечивают еще огромную мощность и упругость. Практически, последующая структура и класс по выполнению схожи:

Единственным значимым различием тут является public — ключевое слово в классе. О нем мы побеседуем детальнее в последующем уроке.

Так же, как объявление структуры, объявление класса не подводит к выделению какой-нибудь памяти. Для использования класса необходимо объявить переменную этого типа класса:

В C++, переменная класса именуется экземпляром либо объектом класса . Точь-в-точь как определение переменной фундаментального типа данных (к примеру, int x) подводит к выделению памяти для этой переменной, так же и создание объекта класса (к примеру, DateClass today) подводит к выделению памяти для этого объекта.

Способы класса.

Кроме хранения данных, классы также могут содержать функции! Функции, определенные снутри класса, именуются функциями-членами либо способами . Способы могут быть определены снутри либо вне класса. Пока мы будем определять их снутри класса (для простоты), как найти их вне класса – разглядим несколько позднее.

C класс

В языке C структуры могут только хранить данные и не могут иметь связанных функций-членов. В C++, впоследствии проектирования классов (применяя ключевое слово class), Бьёрн Страуструп размышлял о том, необходимо ли, чтоб структуры (которые были унаследованы из языка С) имели связанные функции-члены. Впоследствии неких раздумий он решил, что необходимо.

Потому, в программках выше мы также можем пользоваться ключевое слово struct, заместо class, и всё будет работать!Почти все разработчики (включая и меня) считают, что это было неверное решение, так как оно может привести к дилеммам: к примеру, справедливо представить, что класс делает чистку памяти впоследствии себя (к примеру, класс, которому выделена память, высвободит её до того, как будет уничтожен), но полагать тоже самое в работе со структурами опасно. Как следует, мы советуем пользоваться ключевое слово struct для структур, применяемых только для хранения данных и ключевое слово class для определения объектов, которые требуют объединения как данных, так и функций.

Когда мы вызываем today.print(), мы сообщаем компилятору вызвать способ print() объекта today.

Разглядим определение способа print снова:

Name: Max Id: 6 Wage: $32.75.

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

Класс Date с способом вывода даты:Направьте внимание, как эта программка похожа с программкой выше (где употребляется структура).Однако есть несколько различий. В версии DateStruct для print() нам необходимо было передать переменную структуры конкретно в функцию print() в качестве параметра. Если б мы этого не сделали, то print() не знал бы, какую переменную DateStruct выводить. Нам тогда бы преходилось очевидно ссылаться на члены структуры снутри функции.Способы класса работают чуть по другому: все вызовы функций-членов должны быть связаны с объектом класса.

Правило: Используйте ключевое слово struct для структур, применяемых только для хранения данных. Используйте ключевое слово class для объектов, объединяющих как данные, так и функции.

Вы уже применяли классы, не зная об этом.

Оказывается, стандартная библиотека C++ полна классов, предназначенных для вашего удобства. std::string , std::vector и std::array – это всё типы классов! Потому, когда вы создаете объект хоть какого из этих типов, вы создаете объект класса.В отличие от обыденных функций, порядок, в каком определены способы класса, не имеет значения!Примечание о структурах в C++

Метки: Метки