С++ для начинающих





Скачать 17.65 Mb.
НазваниеС++ для начинающих
страница5/198
Дата публикации21.08.2013
Размер17.65 Mb.
ТипКнига
100-bal.ru > Информатика > Книга
1   2   3   4   5   6   7   8   9   ...   198

2. Краткий обзор С++


Эту главу мы начнем с рассмотрения встроенного в язык С++ типа данных “массив”. Массив – это набор данных одного типа, например массив целых чисел или массив строк. Мы рассмотрим недостатки, присущие встроенному массиву, и напишем для его представления свой класс Array, где попытаемся избавиться от этих недостатков. Затем мы построим целую иерархию подклассов, основываясь на нашем базовом классе 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.)

Промежуточное положение между встроенными типами данных и типами данных из стандартной библиотеки занимают составные типы – массивы и указатели. (Указатели рассмотрены в разделе 2.2.)

Массив – это упорядоченный набор элементов одного типа. Например, последовательность

0 1 1 2 3 5 8 13 21

представляет собой первые 9 элементов последовательности Фибоначчи. (Выбрав начальные два числа, вычисляем каждый из следующих элементов как сумму двух предыдущих.)

Для того чтобы объявить массив и проинициализировать его данными элементами, мы должны написать следующую инструкцию С++:

int fibon[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };

Здесь fibon – это имя массива. Элементы массива имеют тип int, размер (длина) массива равна 9. Значение первого элемента – 0, последнего – 21. Для работы с массивом мы индексируем (нумеруем) его элементы, а доступ к ним осуществляется с помощью операции взятия индекса. Казалось бы, для обращения к первому элементу массива естественно написать:

int first_elem = fibon[1];

Однако это не совсем правильно: в С++ (как и в С) индексация массивов начинается с 0, поэтому элемент с индексом 1 на самом деле является вторым элементом массива, а индекс первого равен 0.Таким образом, чтобы обратиться к последнему элементу массива, мы должны вычесть единицу из размера массива:

fibon[0]; // первый элемент

fibon[1]; // второй элемент

...

fibon[8]; // последний элемент

fibon[9]; // ... ошибка

Девять элементов массива fibon имеют индексы от 0 до 8. Употребление вместо этого индексов 1-9 является одной из самых распространенных ошибок начинающих программистов на С++.

Для перебора элементов массива обычно употребляют инструкцию цикла. Вот пример программы, которая инициализирует массив из десяти элементов числами от 0 до 9 и затем печатает их в обратном порядке:

int main()


{

int ia[10];

int index;
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.)

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

int array0[10]; array1[10];

...

array0 = array1; // ошибка

Вместо этого мы должны программировать такую операцию с помощью цикла:

for (int index=0; index<10; ++index)

array0[index] = array1[index];

Массив “не знает” собственный размер. Поэтому мы должны сами следить за тем, чтобы случайно не обратиться к несуществующему элементу массива. Это становится особенно утомительным в таких ситуациях, как передача массива функции в качестве параметра. Можно сказать, что этот встроенный тип достался языку С++ в наследство от С и процедурно-ориентированной парадигмы программирования. В оставшейся части главы мы исследуем разные возможности “улучшить” массив.

Упражнение 2.1

Как вы думаете, почему для встроенных массивов не поддерживается операция присваивания? Какая информация нужна для того, чтобы поддержать эту операцию?

Упражнение 2.2

Какие операции должен поддерживать “полноценный” массив?
1   2   3   4   5   6   7   8   9   ...   198

Похожие:

С++ для начинающих iconКалендарно-Тематическое планирование элективного курса «Компьютер для начинающих» для 5 класс
Программа элективного курса «Компьютер для начинающих» для 5 класса (Рекомендована Экспертным Советом му «Управление образования...
С++ для начинающих iconПособие на каждый день для начинающих студентов Губкинского университета...
У нас так принято. Пособие на каждый день для начинающих студентов Губкинского университета и не только для них. Авторы: доцент Л....
С++ для начинающих iconСписок используемой литературы на тему «Компьютерная графика и Анимация»...
Издательство: Педагогика–пресс «Информатика: Энциклопедический словарь для начинающих.» – 1994 – С. 121-154
С++ для начинающих iconПояснительная записка Программа рассчитана на 30 час ( 2 часа в неделю)....
Учебник английского языка «Страна чудес Wonderland Pre-Junior для начинающих» Кристина Бруни Эдинбург, «Пирсон», 2012
С++ для начинающих iconМетодические рекомендации для учителей, начинающих работать по курсу...

С++ для начинающих iconНик Бостром. Рассуждение о Конце Света для начинающих. Алексей Турчин
Оценочные средства для текущего контроля успеваемости, промежуточной итоговой аттестации студентов д/о и з/о
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
Уровень подготовленности: для начинающих; для среднего и любого уровня подготовленности; для подготовленных
С++ для начинающих iconRu Персональный компьютер, или "Азбука pc" для начинающих http
Олимпиады и контрольно-измерительные материалы по информатике и ит олимпиадная информатика
С++ для начинающих iconНемецкий язык для начинающих
С 34 Лингвострановедение и страноведение: учебно-методический комплекс / А. А. Сибгатуллина – Елабуга: Изд-во егпу, 2010. – 24с
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
Курс для начинающих 1 (А1): для абсолютных новичков. Разговор для первой ориентации,ситуации повседневной жизни,грамматических структур...
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
С++ для начинающих iconПособие на каждый день для начинающих студентов Нефтегаза и не только для них Тюмень
Использовано пособие «У нас так принято!» Российского государственного университета нефти и газа им. Губкина
С++ для начинающих iconПоложение о XV городской конференции учащихся «Первая ступень в науку»
Создание условий для формирования познавательного интереса у начинающих исследователей в различных отраслях науки
С++ для начинающих iconПрограмма по формированию навыков безопасного поведения на дорогах...
Аэробика с использованием степ платформы. Рекомендуется для начинающих. Продолжительность 45 минут


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск