Программирование >>  Инициализация объектов класса, структура 

1 ... 7 8 9 [ 10 ] 11 12 13 ... 395


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.)

Несмотря на то, что в С++ встроена поддержка для типа данных массив , она весьма ограничена. Фактически мы имеем лишь возможность доступа к отдельным элементам массива. С++ не поддерживает абстракцию массива, не существует операций над массивами в целом, таких, например, как присвоение одного массива другому или сравнение двух массивов на равенство, и даже такой простой, на первый взгляд, операции, как получение размера массива. Мы не можем скопировать один массив в другой, используя простой оператор присваивания:



1 ... 7 8 9 [ 10 ] 11 12 13 ... 395

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика