Перегрузка функции упрощает разработку программы и делает ее код более понятным, устраняя необходимость в изобретение и запоминании имен, которые существуют только для того, чтобы помочь компилятору выяснить какую из функций следует вызвать. Чтобы понять принцип перегрузки функций следует уяснить как компилятор выбирает при вызове функцию из набора перегруженных функций.
Перегрузка оператора состоит в изменении смысла оператора (например, оператора плюс (+), который обычно в C++ используется для сложения) при использовании его с определенным классом. В данном уроке вы определите класс string и перегрузите операторы плюс и минус. Для объектов типа string оператор плюс будет добавлять указанные символы к текущему содержимому строки. Подобным образом оператор минус будет удалять каждое вхождение указанного символа из строки. К концу данного урока вы изучите следующие основные концепции:
Перегрузка операторов может упростить наиболее общие операции класса и улучшить читаемость программы. Найдите время для эксперимента с программами, представленными в этом уроке, и вы обнаружите, что перегрузка операторов выполняется очень просто.
27. Время жизни и области видимости объекта.
Имена в языке С++ имеют область видимости, а объекты- продолжительность существования. Область видимости имени- это та часть текста программы в которой оно применимо. Продолжительность существования объекта- это время, в течение которого существует объект при выполнение программы. Имена параметров и переменных, определенных внутри функции, находятся в области видимости данной функции, т.е. имена видимы только внутри тела функции. Как обычно, имя переменой становиться применимо с момента ее объявления или определения и до конца области видимости включительно.
28. Спецификаторы класса памяти.
sc-спецификатор: auto static extern registerОписания, использующие спецификаторы auto, static и register также служат определениями тем, что они вызывают резервирование соответствующего объема памяти.
Описание register лучше всего представить как описание auto (автоматический) с подсказкой компилятору, что описанные переменные усиленно используются. Подсказка может быть проигнорирована. К ним не может применяться операция получения адреса &.
Спецификаторы auto или register могут применяться только к именам, описанным в блоке, или к формальным параметрам. Внутри блока не может быть описаний ни статических функций, ни статических формальных параметров.
Некоторые спецификаторы могут использоваться только в описаниях функций:
Спецификатор перегрузки overload делает возможным использование одного имени для обозначения нескольких функций;
Спецификатор inline является только подсказкой компилятору, не влияет на смысл программы и может быть проигнорирован. Он используется, чтобы указать на то, что при вызове функции inline- подстановка тела функции предпочтительнее обычной реализации вызова функции.
29. Объявление переменных на глобальном уровне. Инициализация глобальных и локальных переменных.
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 *s1, const char*s2) – эта функция сравнивает две строки, а возвращаемое значение надо понимать следующим образом:
меньше нуля если 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( str1); //выведет 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. Работа с файлами в С++: вывод в файловый поток, чтение их входного файлового потока.
На дисках данные хранятся в виде структур данных, обслуживаемых операционной системой, – в виде файлов. Файл проще всего представить как линейную последовательность символов.
Перед началом изучения файловых операций в Си++, необходимо ознакомиться с понятием потока ввода/вывода. Поток напоминает "канал" или "трубу", через которую данные поступают от передатчика к приемнику. Исключительно важная особенность потоковой обработки данных состоит в том, что элементы данных можно посылать или считывать из потока только по одному за раз, т.е. последовательно.