|
Программирование >> Инициализация объектов класса, структура
2. Краткий обзор С++ Эту главу мы начнем с рассмотрения встроенного в язык С++ типа данных массив . Массив - это набор данных одного тина, например массив целых чисел или массив строк. Мы рассмотрим недостатки, присущие встроенному массиву, и нанишем для его представления свой класс Array, где попытаемся избавиться от этих недостатков. Затем м1 построим целую иерархию подклассов, основываясь на нашем базовом классе Array. В конце концов мы сравним наш класс Array с классом vector из стандартной библиотеки С++, реализующим аналогичную функциональность. В процессе создания этих классов мы коснемся таких свойств С++, как шаблоны, пространства имен и обработка ошибок. 2.1. Встроенный тип данных массив Как было показано в главе 1, С++ предоставляет встроенную поддержку для основных объявление целого объекта ival ival инициализируется значением 1024 int ival = 1024; объявление вещественного объекта двойной точности dval dval инициализируется значением 3.14159 double dval = 3.14159; объявление вещественного объекта одинарной точности fval fval инициализируется значением 3.14159 типов данных - целых и вещественных чисел, логических значений и символов: float fval = 3.14159; К числовым типам данных могут применяться встроенные арифметические и логические int ival2 = ival1 + 4096; сложение операции: объекты числового типа можно складывать, вычитать, умножать, делить и т.д. int ival3 = ival2 - ival; вгчитание dval = fval * ival; умножение ival = ival3 / 2; деление bool result = ival2 == ival3; сравнение на равенство result = ival2 + ival != ival3; сравнение на неравенство result = fval + ival2 < dval; сравнение на меньше result = ival > ival2; сравнение на больше В дополнение к встроенным типам стандартная библиотека С++ предоставляет поддержку для расширенного набора типов, таких, как строка и комплексное число. (Мы отложим рассмотрение класса vector из стандартной библиотеки до раздела 2.7.) fibon[0]; первый элемент fibon[1]; второй элемент fibon[8]; последний элемент массива, мы должны вычесть единицу из размера массива: fibon[9]; ... ошибка Девять элементов массива fibon имеют индексы от 0 до 8. Употребление вместо этого индексов 1-9 является одной из самых распространенных ошибок начинающих программистов на С++. Для перебора элементов массива обычно употребляют инструкцию цикла. Вот пример программы, которая инициализирует массив из десяти элементов числами от 0 до 9 и int main() затем печатает их в обратном порядке: int ia[10]; int index; Промежуточное положение между встроенными типами данных и типами данных из стандартной библиотеки занимают составные типы - массивы и указатели. (Указатели рассмотрены в разделе 2.2.) Массив - это упорядоченный набор элементов одного типа. Например, последовательность [0 1 1 2 3 5 8 13 21 I представляет собой первые 9 элементов последовательности Фибоначчи. (Выбрав начальные два числа, вычисляем каждый из следующих элементов как сумму двух предыдущих.) Для того чтобы объявить массив и проинициализировать его данными элементами, м1 должны написать следующую инструкцию С++: int fibon[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 }; Здесь fibon - это имя массива. Элементы массива имеют тип int, размер (длина) массива равна 9. Значение первого элемента - 0, последнего - 21. Для работы с массивом м1 индексируем (нумеруем) его элемент:, а доступ к ним осуществляется с помощью операции взятия индекса. Казалось бы, для обращения к первому элементу массива естественно написать: int first elem = fibon[1]; Однако это не совсем правильно: в С++ (как и в С) индексация массивов начинается с 0, поэтому элемент с индексом 1 на самом деле является вторым элементом массива, а индекс первого равен 0.Таким образом, чтобы обратиться к последнему элементу for (index=0; index<10; ++index) ia[0] = 0, ia[1] = 1 и т.д. ia[index] = index; for (index=9; index>=0; -index) cout << ia[index] << ; cout << endl; Оба цикла выполняются по 10 раз. Все управление циклом for осуществляется инструкциями в круглых скобках за ключевым словом for. Первая присваивает начальное значение переменной index. Это производится один раз перед началом цикла: index = 0; Вторая инструкция: index < 10; представляет собой условие окончания цикла. Оно проверяется в самом начале каждой итерации цикла. Если результатом этой инструкции является true, то выполнение цикла продолжается; если же результатом является false, цикл заканчивается. В нашем примере цикл продолжается до тех пор, пока значение переменной index меньше 10. На каждой итерации цикла выполняется некоторая инструкция или группа инструкций, составляющих тело цикла. В нашем случае это инструкция ia[index] = index; Третья управляющая инструкция цикла ++index выполняется в конце каждой итерации, по завершении тела цикла. В нашем примере это увеличение переменной index на единицу. Мы могли бы записать то же действие как index = index + 1 но С++ дает возможность использовать более короткую (и более наглядную) форму записи. Этой инструкцией завершается итерация цикла. Описанные действия повторяются до тех пор, пока условие цикла не станет ложным. Вторая инструкция for в нашем примере печатает элементы массива. Она отличается от первой только тем, что в ней переменная index уменьшается от 9 до 0. (Подробнее инструкция for рассматривается в главе 5.) Несмотря на то, что в С++ встроена поддержка для типа данных массив , она весьма ограничена. Фактически мы имеем лишь возможность доступа к отдельным элементам массива. С++ не поддерживает абстракцию массива, не существует операций над массивами в целом, таких, например, как присвоение одного массива другому или сравнение двух массивов на равенство, и даже такой простой, на первый взгляд, операции, как получение размера массива. Мы не можем скопировать один массив в другой, используя простой оператор присваивания:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |