Что такое класс хранения в C ++ и его типы?



В этом блоге о классах хранения мы рассмотрим различные классы хранения, используемые в C ++, такие как auto, register, static, extern и mutable, с примерами.

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

Давайте начнем.





Что такое класс хранения в C ++?

Каждая переменная в C ++ имеет тип данных и класс хранения. Тип данных определяет тип данных, которые могут храниться в переменной, такой как int, float, char и т. Д. Класс хранения управляет двумя разными свойствами переменной: временем жизни и областью.

Вы бы видели, что каждая переменная имеет тип данных, но, возможно, вы еще не видели какой-либо класс хранения, прикрепленный к переменной. Фактически, если вы не определяете класс хранения, компилятор автоматически назначает ему класс хранения по умолчанию. Класс хранения переменной предоставляет информацию о месте хранения переменной в памяти, начальном значении по умолчанию, области действия переменной и ее времени жизни.



Типы класса хранения

В программе C ++ есть пять классов хранения:

  • авто
  • регистр
  • статический
  • внешний
  • изменчивый

Давайте подробно обсудим каждый из классов хранения.

Класс автоматического хранения

Класс автоматического (автоматического) хранения - это класс хранения по умолчанию для всех локальных переменных, которые объявлены внутри функции или блока. Ключевое слово auto редко используется при написании Программа на C ++ .



Объем автоматических переменных находится внутри функции или блока, в котором они были объявлены, и к ним нельзя получить доступ за пределами этой функции или блока. К нему также можно получить доступ во вложенных блоках в родительском блоке / функции, в которой была объявлена ​​автоматическая переменная.

Вы можете получить доступ к автоматическим переменным вне их области, используя переменную-указатель. Вам нужно указать на то же место в памяти, где находятся переменные.

Его время жизни такое же, как время жизни функции. По завершении выполнения функции переменная уничтожается.

По умолчанию при объявлении им присваивается значение мусора.

Синтаксис:

тип данных var_name1 [= значение]

или

автоматический тип данных var_name1 [= значение]

В приведенном выше примере две переменные определены с одним и тем же классом хранения. Авто можно использовать только для определения локальных переменных, то есть внутри функций.

Зарегистрировать класс хранилища

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

Таким образом, операции с регистровыми переменными намного быстрее, чем операции с другими переменными, которые хранятся в памяти во время выполнения программы.

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

Максимальный размер переменной равен размеру регистра (т.е. примерно одно слово). К нему нельзя применять унарный оператор '&', поскольку он не имеет ячейки памяти.

Синтаксис:

зарегистрировать тип данных var_name1 [= значение]

Пример:

как установить путь к классам в java с помощью командной строки
{зарегистрировать int pi}

Определение «регистр» не означает, что переменная будет храниться в регистре. Он может храниться в реестре в зависимости от аппаратных и реализационных ограничений.

Давайте посмотрим на пример классов регистрации и автоматического хранения.

Пример:

#include using namespace std // объявление переменной, которая должна быть сделана extern // начальное значение также может быть инициализировано x int x void autoStorageClass () {printf ('nDemonstrating auto classnn') // объявление автоматической переменной (просто // запись 'int a = 32' тоже работает) int num = 32 // печать автоматической переменной 'a' printf ('Значение переменной' num '' 'объявлено как auto:% dn', num) printf ( '--------------------------------')} void registerStorageClass () {printf ('nDemonstrating register classnn') / / объявление регистровой переменной register char c = 'G' // печать регистровой переменной 'b' printf ('Значение переменной' c '' ', объявленной как register:% dn', c) printf ('---- ---------------------------- ')} int main () {// Чтобы продемонстрировать автоматический класс хранения autoStorageClass () // Чтобы продемонстрировать register Storage Class registerStorageClass () return 0}

Вывод:

Вывод - Класс хранилища в C ++ - EdurekaСтатический класс хранения

Класс статического хранилища используется для объявления статические переменные . Статические переменные сохраняют свое значение (т. Е. Последнее значение), даже если они находятся вне своей области видимости. Статические переменные инициализируются только один раз &существуют до окончания программы.

Память выделяется только один раз для статической переменной, и новая память не выделяется, потому что они не объявляются повторно. Доступ к глобальным статическим переменным можно получить в любом месте программы. По умолчанию компилятор присваивает им значение 0.

В C ++, когда static используется для члена данных класса, это приводит к тому, что только одна копия этого члена используется всеми объектами его класса.

Синтаксис:

статический тип данных var_name1 [= значение]

Пример:

#include void function (void) static int c = 5 // Глобальная статическая переменная main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

Вывод:

Класс внешнего хранилища

Класс внешнего хранилища требуется, когда переменные должны совместно использоваться несколькими файлами. Внешние переменные имеют глобальную область видимости, и эти переменные видны вне файла, в котором они объявлены. Переменная extern видна всем программам. Он используется, если два или более файла используют одну и ту же переменную или функцию.

Время жизни внешних переменных - до тех пор, пока программа, в которой они объявлены, завершена. Обычную глобальную переменную также можно сделать extern, поместив ключевое слово extern перед ее объявлением / определением в любой функции / блоке.

Когда вы используете «extern», переменная не может быть инициализирована, поскольку все, что она делает, это указывает имя переменной на место хранения, которое было ранее определено.

Синтаксис

внешний тип данных var_name1

пример

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

Второй файл: support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

Здесь ключевое слово extern используется для объявления cnt в другом файле. Теперь скомпилируйте эти два файла следующим образом & минус

$ g ++ main.cpp support.cpp -o написать

Это приведет к записи исполняемой программы, попытайтесь выполнить запись и проверьте результат следующим образом & минус

выучить pl sql онлайн бесплатно

$. / запись

5

Продвигаясь вперед с классом хранилища в C ++, давайте посмотрим на последний, то есть на изменяемый класс хранилища.

Класс изменяемого хранилища

Изменяемый спецификатор применяется только к объектам класса, что позволяет члену объекта переопределять константную функцию-член. Таким образом, изменяемый член может быть изменен константной функцией-членом.

Наконец, давайте посмотрим на сравнительную таблицу, чтобы понять различия между разными классами хранения.

Класс хранения

Ключевое слово

Продолжительность жизни

Видимость

Первоначальный значение

Автоматический

авто

Функциональный блок

Местный

Мусор

Внешний

внешний

Вся программа

сортировка массива c ++ по возрастанию

Глобальный

Нуль

Статический

статический

Вся программа

Местный

Нуль

регистр

регистр

Функциональный блок

Местный

Мусор

Мутабельный

изменчивый

Класс

Местный

Мусор

Теперь, пройдя через вышеуказанные программы на C ++, вы бы поняли, что такое разные классы хранения в C ++ и как их реализовать. Я надеюсь, что этот блог будет информативным и принесет вам пользу.

На этом мы подошли к концу статьи «Классы хранения в C ++».

Если вы хотите узнать больше, ознакомьтесь с от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы обучить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога, и мы свяжемся с вами как можно скорее.