![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование динамических массивовСодержание книги
Поиск на нашем сайте
Конечно, строки — это те же символьные массивы, и тот факт, что new и delete также могут использоваться для создания и освобождения динамических массивов любого типа, не будет для вас сюрпризом. Листинг 1.12 демонстрирует это.
Листинг 1.12. NEWARRAY.CPP (объявление массивов с помощью new) 1: 1: #include <iostream.h> 2: 3: #define COUNT 100 // Количество целых значений 4: 5: main() 6: { 7: int *array; // Массив целых значений 8: int i; // Индекс массива 9: 10: array = new int[COUNT]; 11: 12: // Заполнение массива 13: for (i = 0; i < COUNT; i++) 14: array[i] = i; 15: 16: // Вывод содержимого массива 17: for (i = 0; i < COUNT; i++) { 18: cout.width(8); 19: cout << array[i]; 20: } 21: delete[ ] аггау; 22: return 0; 23: }
Многомерные динамические массивы Для объявления указателя на двух- или трехмерный массив (или большей размерности) надо указать количество элементов во второй и последующей позициях. Например, для массива 10x20 вещественных значений двойной точности: int (*matrix)[20]; Оно определяет matrix, как указатель на массив из 20 целых. Вы должны заключить в круглые скобки (*matrix), поскольку квадратные скобки массива имеют больший приоритет, чем символ указателя *. Целых значений еще даже не существует; все что вы сделали — только дали указание компилятору, что matrix — указатель на массив определенного размера. Чтобы выделить память для матрицы размером 10x20 и присвоить ее адрес переменной matrix,надо: matrix = new int[10][20]; Оператор new выделяет память для массива. Адрес, получившийся в результате, присваивается matrix. Для создания куба 8x8x8 следует написать следующее: int (*matrix)[8][8]; matrix = new int[8][8][8]; Такое объявление matrix определяет вторую и третью размерность массива, указывая компилятору, что matrix адресует массив целых значений размерностью 8x8. Выражение new определяет все три измерения, выделяя пространство для указанного числа массивов 8x8, другими словами — трехмерного куба.
При вьщелении пространства для многомерного массива первый индекс может быть переменной, а второй и последующие должны быть константами. Например, если целая переменная v равна 40, то следующие строки int (*matrix)[20]; matrix = new int[v][20]; выделяют пространство для двухмерного массива размерностью 40x20 элементов целых значений, адресуемого matrix. Удаление многомерных массивов любой размерности происходит так, как будто они имеют лишь одно измерение: delete[] matrix; Перегрузка функций Пример: программа, которая должна рисовать несколько различных фигур. Каждая функция прорисовки имеет свое собственное имя, что делает код "усыпанным" функциями типа DrawEllipse, DrawCircle, DrawSquare, DrawLine и т.д мы получим программу, словно написанную заикой: DrawEllipse(ellipse); DrawCircle(circle); DrawSquare(square); DrawLine(line); Не будет ли лучше, если вы используете одно и то же имя функции (назовем ее Draw) для вывода всех фигур? Draw(ellipse); Draw(circle); Draw(square); Draw(line); В С++ многочисленные функции могут иметь одинаковое имя до тех пор, пока они отличаются хотя бы одним параметром. Функции "перегружены", поскольку их имена одинаковы, а выполняемая ими работа — различна. Многие функции Draw в нашей гипотетической графической программе остаются раздельными и различными, и написаны точно так же, как и другие не перегруженные функции. Но компилятор С++ распознает их по тому, как они используются, а не только по их именам. Пример: В листинге 1.13 используются перегруженные функции для отображения квадратов трех различных значений. Листинг 1.13. OVERLOAD.CPP (перегрузка функций)
2: 3:int square(int а); 4:double square(double а); 5:long double square(long double a); 6: Main() 8:{ 9: int x = 10; 10 double у = 20.5; 11 long double z = 30.75; 12: 13: cout << square(x) << '\n'; 14: cout << square(y) << '\n'; 15: cout << square(z) << '\n'; 16: return 0; 17: } 19:int square(int а) 20:{ 21: return а * а; 22: } 24:double square(double а) 25:{ 26: return а * а; 27: } 29:long double square(long double a) 30:{ 31: return а * а; 32: } Прототипы трех перегруженных функции square() определены в строках 3-5. Все функции имеют одинаковое имя, но, тем не менее, они различны, поскольку каждая из них отличается хотя бы одним параметром от другой. Сами функции реализованы в строках 19-32 как раздельные, т.е. имеющие различные имена. В строках 13-15 показано, как перегруженные функции могут прояснять суть программы. Несмотря на различия в типах данных, очевидно, что каждый оператор выводит квадрат аргумента. Это куда более приятно, чем различать функции по именам типа squareInt(), squareDouble() и squareLongDouble(). Конечно, решать, стоит ли перегружать функции, которые выполняют более или менее схожую работу, придется вам. Если вы назовете все функции в вашей программе одним и тем же именем (с учетом того, что они должны отличаться хотя бы одним своим аргументом), то ваш код может стать совершенно непостижимым, как новелла, представляющая собой многократное повторение одного и того же слова.
|
|||||||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 128; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.156.198 (0.009 с.) |