Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Нуль-терминированные строки – строки, в которых символ с кодом 0 является признаком конца строки и не входит в её состав.

Пространства имён. Работа с пространствами имён. Оператор using. Приоритеты и конфликты имён.

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

Объявление пространства имен
Пространство имен объявляется с помощью оператора

namespace [ имя_пространства ] { объявления };

В операторе namespace могут присутствовать не только объявления, но и определения программных объектов (тела функций, инициализаторы переменных и т.д.).

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

namespace NS1 {

int i=1;

int k=0;

void f1(int);

void f2(double);

}

namespace NS2 {

int i, j, k;

}

namespace NS1 {

int i=2; // Ошибка – повторное определение

int k; // Ошибка – повторное объявление

void f1(void); // Перегрузка

void f2(double); //А такое повторное объявление допустимо!

}

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

Стандартное пространство имен
Объекты стандартной библиотеки классов (потоки ввода-вывода также входят в состав этой библиотеки) могут быть расположены в пространстве имен std. При этом программист в отдельных случаях может выбрать режим описания: в заголовочном файле <iostream.h> потоки ввода вывода описаны как объекты из безымянного пространства, а в заголовочном файле <iostream> они же включены в пространство std. С другой стороны, класс string описан только в заголовочном файле <string> и находится в пространстве имен std.

К настоящему времени стандартным стал способ записи заголовочных файлов без ”.h” (и, соответственно, указание пространства имен std либо явно, либо с помощью оператора using). Более того, заголовочные файлы стандартной библиотеки с суффиксом ”.h”считаются устаревшими и существуют только для обратной совместимости.

Разрешение области действия идентификатора

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

Void main(void)

{

int i = 2 + NS1::i;

}

Объявление и директива using

Если имя часто используется вне своего пространства, его можно объявить доступным с помощью оператора

using имя_пространства:: имя_в_пространстве;

После чего такое имя можно использовать без явного указания имени пространства, например

Void main(void)

{

using NS2::k;

int i = 2 + k;

}

Наконец, можно сделать доступными все имена из какого-либо пространства, записав оператор

using namespace имя_пространства;

Имена, объявленные где-нибудь явно или с помощью оператора using, имеют приоритет перед именами, доступными по оператору using namespace.

Псевдонимы пространства имен

Можно задать псевдоним (синоним) пространства имен с помощью оператора

using имя_синонима = имя_пространства;

 

 

Строки. Операции над строками.

Строка – конечная последовательность символов. Количество символов в строке называется её длиной (текущей длиной). Допустимы строки нулевой длины.

Основные операции над строками:

· поиск символов в строке;

· замена символов в строке;

· поиск, замена, удаление подстрок;

· вставка в строку новой подстроки;

· сцепление (конкатенация) двух строк.

В результате выполнения этих операций длина строки может измениться!

Средства C++ для работы со строками

Для работы со строками символов язык C++ предоставляет две возможности:

· работу с массивами данных типа char (функции для работы с такими данными описаны в файлах <string.h> или <cstring>

· класс string, описанный в файле <string>

Работа со строками фиксированной длины

Если длина строки известна, не равна нулю и не изменяется, для её хранения можно использовать массив соответствующего размера.

Пример: номер зачётной книжки всегда состоит из 7 символов

char nz[7];

nz[0] = '1'; nz[1] = '0'; nz[2] = '2'; nz[3] = '3';

nz[4] = '1'; nz[5] = '6'; nz[6] = '9';

for (int i=0; i<7; i++)

cout << nz[i];

Неудобства такого подхода – строку можно обрабатывать только посимвольно!

Нуль-терминированные строки. Функции стандартной библиотеки для обработки нуль-терминированных строк.

Нуль-терминированные строки

Нуль-терминированные строки – строки, в которых символ с кодом 0 является признаком конца строки и не входит в её состав.

Нуль-терминированные строки используются:

· в строковых константах;

· при вводе-выводе;

· в стандартных функциях, описанных в файле <string.h>

Примеры строковых констант:
"T"
"This is \”string \”.”
"This is character string"
"Это строковая константа"
"A" "1234567890" "0" "$"

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

Определение и инициализация строк

Строка объявляется как массив символов:
char *str;
или
char str[10];
При инициализации строки размерность массива лучше не указывать.
char *str="This is a string";
char str[]="This is a string“;

Такой вид инициализации является краткой формой стандартной инициализации массива
char str[]={’T’,’h’, ’i’, ’s’, ’ ’, ’i’, ’s’, ’ ’, ’a’,’ ’, ’s’, ’t’, ’r’, ’i’, ’n’,’g’,’\0’};
Без символа 0 имеем обычный массив символов, а не строку.
Как и для других массивов, имя str является указателем на первый элемент массива:
str == &str[0], *str == 'T', *(str+1) == str[1] == 'h'

Функции для работы со строками из заголовочного файла <string.h>

char* strcat(char *sl, const char *s2) (сцепление строк).

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...