Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Дополнительные типы, реализуемые классами
Рассмотрим отдельно эти типы. Set реализуется шаблонным классом Set: Set< < тип>,<мин.значение элемента множества>,<макс. значение(<=255) >> Пример: typedef Set <char, 'A','Z'> bolhiebukvi; // прописные латинские буквы bolhiebukvi glasnie, soglasnie; // объявление множеств гласных и согласных glasnie <<'A'<<'I'<<'E'; // заполнение множества гласными буквами soglasnie <<'B'<<'C'<<'D'; // заполнение множества согласными буквами // проверка принадлежности буквы ‘B’ принадлежности множеству glasnie Label1->Caption=glasnie.Contains('А')?»Да»:»Нет»; // вывод «Да» String реализуется в виде: String <список имен>. Эти строки могут использоваться в привычных операциях сцепления (+) и сравнения строк (==). Внимание! Отсчет символов начинается не с нуля, а с единицы Перечислим основные методы (имя строки и метод разделяются точкой) работы с этими строками: ToDouble/ToInt ‑ перевод строки в вещественное/целое число. c_str‑ возвращает указатель на символьный массив с исходной строкой. Length, IsEmpty ‑ возвращает длину строки, признак пустой строки (True). IsEmpty ‑ возвращает true, если длина строки нулевая. Insert(i) ‑ вставка строки после i‑й позиции исходной строки. Delete/SubString(i,n) ‑ удаление/выделение подстроки длиной n с i‑й позиции исходной строки (r=Label1->Caption.SubString(2,3)). LastDelimiter‑ возвращаетпозицию последнего символа‑ограничителя. LowerCase/UpperCase ‑ перевод строки в нижний/верхний регистр. Trim, TrimLeft/TrimRight ‑ убрать пробелы и управляющие символы в начале и в конце строки, только в начале/конце строки соответственно. Format‑ форматирование строки, аналогично функции printf. ToInt/ToDouble ‑ перевод числовой строки к целому/вещественному числу. AnsiPos(s), Pos(s) ‑ возврат номера первого символа вхождения строки S. Пример формирования и вывода фамилии, имени и отчества: String Fio, Fam=«Иванов», Imj=«Иван»; Fio=Fam+’ ‘+Imj+’ ‘; Fio.Insert(«Иванович»,Fio.Length()+1); Label1->Caption=Fio; SmallString реализуется в виде: SmallString <длина> <имя строки>.
Пример: SmallString<30>Fam; Fam=«Иванов»; Label1->Caption=Fam; AnsiString реализуется в виде: AnsiString<имя переменной>[<длина>]. Этот тип эквивалентен типу String. Пример: AnsiString Fio, Fam=«Иванов», Imj=«Иван»; Fio=Fam+’ ‘+Imj+’ ‘; Fio.Insert(«Иванович»,Fio.Length()+1); Label1->Caption=Fio; Variant реализуется в виде: Variant <список имен переменных>. Пример: Variant Fam=«Иванов»,Dp=Date();//объявление универсальных переменных Label1->Caption=Fam+DateToStr(Dp); // формирование и вывод метки TDateTime реализуется в виде: TDateTime <список имен переменных>. Этот тип имеет структуру типа double, которая содержит в целой части значение даты (порядкового номера дня начиная с 30.12.1899), а в дробной ‑ значение времени (отсчитывая от 12:00). Пример: TDateTime d=Date(); Label1->Caption=d+1; // дата на завтра Currency реализуется в виде: Currency <список имен переменных>. Currency Stoimoct=123565.15; Label1->Caption=Stoimoct; Переменные‑константы задаются добавлением модификатора const и значений при объявлении этих переменных. Попытки изменить эти значения операторами присваивания будут обнаружены при компиляции. Пример. const int a=1; /* переменная‑константа*/ a=2; // ошибка Переопределение типа можно осуществить оператором typedef. Пример переопределения типаlong double на новый тип vehhiclo: typedef long double vehhiclo;vehhiclo a=1.2, b=1.6; // перемен. типа vehhiclo Массивы Массив - это набор объектов одинакового типа, доступ к которым осуществляется прямо по индексу в массиве. Обращение к массивам осуществляется с помощью указателей (pointers) (п.6.3). Одномерный массив можно описать следующим образом: <тип_данных> <имя_массива > [< размер>]; Используя имя массива и индекс, можно адресоваться к элементам массива: <имя_массива> [< значение_индекса >] Значения индекса должны лежать в диапазоне от нуля до величины, на единицу меньшей, чем размер массива, указанный при его описании. Пример: char fam [20]; // массив (строка) из 20 символов. Двумерный массив можно описать следующим образом: <тип_данных> <имя_массива> [<размер_1>] [< размер_2>]; Пример. int kol [30][20]; // таблица 30 на 20 чисел типа int. Аналогично описываются массивы и больших размерностей. Многомерные массивы располагаются в памяти так, что быстрее всего меняется последний индекс.
Начальные значения элементам массива можно присвоить при его объявлении в виде: <тип имя_массива> [...] = {< знач-1>,< знач-2>,...,< знач-N >}; Если пользователь не указал в квадратных скобках размер массива, то компилятор сам задает размер массива по числу приведенных начальных значений в фигурных скобках. Примеры инициализации одномерных массивов: int data [5 ]={5, 4, 3, 2, 1}; float scores [ ] = {3.4, 2.7, 1.8, 6.9, -24.3}; char tovar [20 ] = {«Сапоги»}; // строка «Сапоги» char prompt [ ] = {«Ответ:»}; // строка «Ответ:» char prompt [ ] = {'О', 'т', 'в', 'е', 'т', ':', '\0' }; // строка «Ответ:» Структуры (записи) Структуры (записи) ‑ это группа логически связанных переменных. Объявление структуры имеет вид: struct [<имя структуры>] { <тип поля 1> <имя поля 1>; ... <тип поля n > <имя поля n>; } [<список имен структурных переменных>] ; Описание переменной структурного типа выглядит следующим образом: struct <имя структуры> < список переменных-записей>; Имя структурной переменной (записи) можно указать и сразу при объявлении структуры перед правой фигурной скобкой. Структурным переменным можно присваивать значения агрегатно (сразу по всей структуре), но их нельзя сравнивать на равенство или неравенство. К полям записи можно обращаться, указывая имя переменной-записи, имя поля и разделяя эти имена точкой. Пример. type1 valuel = x.field1; type3.value3 = z.field3; Если структуры являются глобальными или описаны, как static, внутри функции, то их, как и массивы, можно инициализировать непосредственно в месте описания. Начальные значения для каждой структуры задаются внутри набора фигурных скобок. Соответствие между константами и полями устанавливается по порядку записи. Это означает, что первая по порядку константа связывается с первым по порядку полем, вторая - со вторым и т.д. Комбинируя структуры и массивы, можно строить универсальные и гибкие структуры данных. Пример struct stovar // объявление структуры под именем stovar { int kt; // код товара - целочисленная переменная char nt [20]; // наименование товара - строка из 20 байтов } // конец тела структуры zstovar={1,»Сыр»}; // наименование переменной-записи и значения полей stovar mzstovar [2]; // объявление массива записей типа stovar mzstovar[1].kt=2; // задание значения поля kt второй записи массива printf(«\n%d, %d %s»,zstovar.kt,mzstovar[1].kt,zstovar.nt); // вывод значений Битовые поля задаются в виде: <целочисленный тип> [<имя>]: <ширина в битах (<=64)>; Раполагаются поля в памяти слева направо. Пример. struct vector {int i:2; int:2; unsigned j:4; long k:64;} a,b,c; Объединения union Объединения соответствуют типам вариантных записей языка Delphi и объявляются подобно структурам. Активным может быть только одно поле. Все поля перекрывают друг друга в памяти. Размер объединения равен размеру наибольшего поля. Пример: union un {int i; float f; char c;} a,b; // объявление объединения a.i=1; Label1->Caption=a.i; // использование поля i a.f=12.34; Label2->Caption=a.f; // использование поля f a.c='w'; Label3->Caption=a.c; // использование поля c Перечисления enum Перечисления служат для присвоения имен набору целых чисел (int), что повышает наглядность и надежность задания правильных значений переменной. Объявление имеет вид: enum [<имя перечисляемого типа для объявления переменных>] { <имя 1>[=<значение 1>],...,<имя N>[=<значение N>] }
[<список имен перечисляемых переменных>]; По умолчанию значение первого элемента равно нулю, а значение следующего элемента списка на единицу больше. Пример задания имен дням недели, начиная с понедельника: int main(int argc, char **argv) // основная процедура { enum dninedeli {poned=1,vtor,sreda,hetv,pjtn,subb,vosk} den; // дни недели den=vosk; // задание значения перечисляемой переменной den if (den==vosk) printf(«Воскресенье %d день недели», den); getch(); // вывод } Основные возможности Предпроцессор В задачи предпроцессора входят: подключение (при необходимости) к данной программе внешних файлов, указываемых директивой #include, и выполнение его директив. Директива #Include Во многие программы подставляются один или несколько файлов, часто в самое начало кода главной программы main. Появление директив: #include <файл_1> ... #include «файл_n» приводит к тому, что препроцессор подставляет на место этих директив тексты файлов: файл_1 файл_2 файл_n соответственно. Если имя файла заключено в кавычки, то включается файл пользователя. Если имя файла заключено в угловые скобки, то файл входит во внешние библиотеки C++. Приведем список основных библиотек: stdlib.h (стандартная), math.h, math.hpp (математика), SysUtils.hpp (утилиты), time.h (время), ctype.h (обработка символов), string.h (строки), stdio.h, conio.h (ввод‑вывод). Директива #define С помощью директивы #define, вслед за которой пишутся имя и значение макрооператора, оказывается возможным указать предпроцессору, чтобы он при любом появлении в исходном файле данного имени заменял это имя на соответствующее значение макрооператора (именованные константы (п. 1.1.1)). Пример: #define square (х) ((х)*(х)); /* задает замену символа square (аргумент) на значение (аргумент) * (аргумент) */ Пример: #define рi 3.1415926; /* связывает идентификатор pi со значением 3.1415962 */
|
|||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-08; просмотров: 271; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.200.141.122 (0.028 с.) |