Спецификаторы класса памяти.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой
sc-спецификатор: auto static extern register

Описания, использующие спецификаторы auto, static и register также служат определениями тем, что они вызывают резервирование соответствующего объема памяти.
Описание register лучше всего представить как описание auto (автоматический) с подсказкой компилятору, что описанные переменные усиленно используются. Подсказка может быть проигнорирована. К ним не может применяться операция получения адреса &.
Спецификаторы auto или register могут применяться только к именам, описанным в блоке, или к формальным параметрам. Внутри блока не может быть описаний ни статических функций, ни статических формальных параметров.
Некоторые спецификаторы могут использоваться только в описаниях функций:

фнк-спецификатор: overload inline virtual

Спецификатор перегрузки overload делает возможным использование одного имени для обозначения нескольких функций;
Спецификатор inline является только подсказкой компилятору, не влияет на смысл программы и может быть проигнорирован. Он используется, чтобы указать на то, что при вызове функции inline- подстановка тела функции предпочтительнее обычной реализации вызова функции.





Объявление переменных на глобальном уровне. Инициализация глобальных и локальных переменных.

30. Стоки в С++. Способы реализации строковых переменных. Строковый тип данных.

31.Инициализация символьной строки в С++. Передача строк в функцию. Встроенный строковый тип.

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

char title[64] = "Учимся программировать на языке C++";

Если количество символов, присваиваемое строке, меньше размера массива, большинство компиляторов C++ будут присваивать символы NULL остающимся элементам строкового массива.

ПЕРЕДАЧА СТРОК В ФУНКЦИИ

Передача символьной строки в функцию подобна передаче любого массива в качестве параметра. Внутри функции вам нужно просто указать тип массива (char) и левую и правую скобки массива. Вам не надо указывать размер строки.

Так как символ NULL указывает конец строки, функция не требует параметр, который задает количество элементов в массиве. Вместо этого функция может определить последний элемент, просто найдя в массиве символ NULL.

Символ NULL используется для определения конца строки.

32. Класс string в С++. Функции для работы со строками.

Для работы со строками подключите модуль string.h.

1. strcat ( char * dest , const char * src ); - эта функция добавляет (копирует) в конец первой строки содержимое второй. У этой функции два параметра типа указатель на строку. Пример:

#include <string.h>

#include <iostream.h>

#include <conio.h>

void main(){

char a[20]="hello", c[]=" from the srr";

strcat(a,c);

cout<< a<<', '<< c<<' '<< "\n"; // выведет hello from the srr, from the srr

getch ();}

2. strcmp ( const char * s 1, const char * s 2) – эта функция сравнивает две строки, а возвращаемое значение надо понимать следующим образом:

меньше нуля если s1 < s2

равно нулю если s1 == s2

больше нуля если s1 > s2

Понятие больше, меньше или равно применяется в соответствии с кодами букв входящих в состав строк, т.е. сравниваются первые буквы (их коды ), если они равны, то сравниваются последующие, до тех пор пока не будут найдены различные и на основе сравнения различных букв выводится результат сравнения строк. Обычно сравнивают строки на предмет равенства, и не интересуются тем, какая больше, например:

char a [20], c [20];

cout<<"\n Введите две строки ";

cin>>a>>c;

if (strcmp(a,c))

cout<<"Строки не равны"<< "\n"; //выведет при разных строках "Строки не равны"

3. strcpy(char *dest, const char *src)- копирует содержимое второй строки в первую:

char string[10];

char *str1 = "abcdefghi";

strcpy(string, str1);

cout<< string; // выведет "abcdefghi"

4. strstr(const char *s1, const char *s2) - осуществляет поиск первого вхождения подстроки в строку, возвращает соответствующий указатель на место в исходной строке:

char a[20]="1234567891011121314", c[]="34";

cout<< "\n"<< strstr(a,c); // выведет 34567891011121314

5. strlen(const char *s)- возвращает длину переданной строки.

char string[10];

char *str1 = "abcdef";

cout << strlen ( str 1); //выведет 6

6. sprintf() - эта функция объявлена в файлах CONIO.H, STDIO.H. Эта функция формирует строку на основе переменного числа параметров.

Пример: char r[50],s[]="string";

int i=1;

float f=1.34;

sprintf(r," Это результирующая строка : s:%s,%c, i:%d,f:%f или %d",s,s[2],i,f,f);

cout<< r;

33. Работа со строками в С++: символьный ввод/вывод, ввод/вывод строки.

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

char s;

s='a';

s=32;

s='\b'

В диапазон типа char входят числа от -128 до 127, коды русских букв имеют код больше 127, для решения этой проблемы используйте тип unsigned char.

В языке С++ нет стандартного типа для работы со строками. для этих целей используется массив символов:

unsigned char s[10]="Привет";

Символьные строки описываются как обычные массивы:

char phrase [17];

При использовании массива символов в качестве строки необходимо помнить, что концом строки считается символ '\0' (т.е. 0). Все стандартные функции корректно вставляют 0 в конец строки, но если вы будите, что либо менять, не забывайте ставить "\0" в конце строки.

Массивы можно полностью или частично проинициализировать непосредственно в операторе описания. Список значений элементов массива заключается в фигурные скобки "{}". Например, оператор

char phrase [17] = { 'В','в','е','д','и','т','е',' ','в','о','з','р','а','с','т',':', '\0' };

одновременно и объявляет массив "phrase", и присваивает его элементам значения.

Очень важно запомнить, что символьные строки хранятся в виде массивов. Поэтому их нельзя приравнивать и сравнивать с помощью операций "=" и "==".

Для копирования и сравнения строк следует применять специальные библиотечные функции.

Если требуется ввести строку, состоящую из нескольких слов, в одну строковую переменную, используются методы getline или get класса iostream.

34. Работа с файлами в С++: вывод в файловый поток, чтение их входного файлового потока.

На дисках данные хранятся в виде структур данных, обслуживаемых операционной системой, – в виде файлов. Файл проще всего представить как линейную последовательность символов.

Перед началом изучения файловых операций в Си++, необходимо ознакомиться с понятием потока ввода/вывода. Поток напоминает "канал" или "трубу", через которую данные поступают от передатчика к приемнику. Исключительно важная особенность потоковой обработки данных состоит в том, что элементы данных можно посылать или считывать из потока только по одному за раз, т.е. последовательно.

Из программы данные можно отправить (записать) в поток вывода, а получить (прочитать) их в программе из потока ввода. Например, сразу после запуска программы, поток стандартного ввода "cin" подключается к клавиатуре, а поток стандартного вывода "cout" – к экрану.

Список функций для работы с файловыми потоками хранится в заголовочном файле "fstream.h". Поэтому во всех рассматриваемых ниже фрагментах программ предполагается, что в начале программы есть соответствующая директива "#include":

#include<fstream.h>. В программе перед первым обращением к потоку ввода или вывода необходимо "создать" поток. Операторы для создания потоков похожи на описания переменных, и они обычно размещаются в начале программы или функции рядом с описаниями переменных. Например, операторы ifstream in_stream;

ofstream out_stream;

создают поток с именем "in_stream", являющийся объектом класса (как типа данных) "ifstream" (input-file-stream, файловый поток ввода), и поток с именем "out_stream", являющийся объектом класса "ofstream" (output-file-stream, файловый поток вывода).

После создания потока его можно подключить к файлу (открыть файл) с помощью функции open(...). Функция "open(...)" у потоков ifstream и ofstream работает по-разному. Для подключения потока ifstream с именем "in_stream" к файлу с именем "Lecture.txt" надо применить следующий вызов:

in_stream.open("Lecture.txt");

Чтобы к файлу "Lecture.txt" подключить поток вывода ofstream с именем "out_stream", надо выполнить аналогичный оператор:

out_stream.open("Lecture.txt");

Этот оператор подключит поток "out_stream" к файлу "Lecture.txt", но при этом прежнее содержимое файла будет удалено. Файл будет подготовлен к приему новых данных. Для отключения потока "in_stream" от файла, к которому он подключен (для закрытия файла), надо вызвать функцию close():

in_stream.close();

35. Работа с файлами в С++: определение конца файла, проверка ошибок при выполнение файловых операций, закрытие файла.

Для отключения потока "in_stream" от файла, к которому он подключен (для закрытия файла), надо вызвать функцию close():

in_stream.close();

Функция отключения от файла у потока вывода:

out_stream.close();

выполняет аналогичные действия, но, дополнительно, в конец файла добавляется служебный символ "end-of-file (маркер конца файла)". Т.о., даже если в поток вывода не записывались никакие данных, то после отключения потока "out_stream" в файле "Lecture.txt" будет один служебный символ. В таком случае файл "Lecture.txt" останется на диске, но он будет пустым.

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

Простейший способ проверки ошибок файловых операций заключается в вызове функции fail(). Вызов

in_stream.fail();

возвращает истинное значение (True), если последняя операция потока "in_stream" привела к ошибке (может быть, была попытка открытия несуществующего файла). После ошибки поток "in_stream" может быть поврежден, поэтому лучше не продолжать работу с ним.

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

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

#include <conio.h>

int main() {

ifstream in_stream;

in_stream.open( "Lecture.txt" );

if ( in_stream.fail() ) {

cout << "Извините, открыть файл не удалось!\n";

getch ();

exit(1);}

36. Работа с файлами в С++: управление открытием файла, символьный ввод/вывод, ввод/вывод строки.

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

ifstream in_stream;

ofstream out_stream;

создают поток с именем "in_stream", являющийся объектом класса (как типа данных) "ifstream" (input-file-stream, файловый поток ввода), и поток с именем "out_stream", являющийся объектом класса "ofstream" (output-file-stream, файловый поток вывода).

После создания потока его можно подключить к файлу (открыть файл) с помощью функции open(...). Функция "open(...)" у потоков ifstream и ofstream работает по-разному.

Для подключения потока ifstream с именем "in_stream" к файлу с именем "Lecture.txt" надо применить следующий вызов:

in_stream.open("Lecture.txt");

Функция ввода get()

После того, как файл для ввода данных открыт, из него можно считывать отдельные символы. Для этого служит функция get(). У нее есть параметр типа char&. Если программа находится в начале файла, то после вызова:

in_stream.get(ch);

переменной "ch" будет присвоено значение первой буквы файла и поток "in_stream" будет подготовлен для чтения следующего символа.

Функция вывода put()

С помощью потока вывода класса ofstream в открытый файл можно записывать отдельные символы. Для этого у класса ofstream есть функция put(). Записываемый символ передается ей как параметр типа "char".

Дата: 2019-12-10, просмотров: 222.