Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Пример создания одномерного динамического массива




Для примера приведем участок кода программы для одномерного динамического массива с использованием операций new и delete.

Напомним, что результатом операции new является адрес начала области памяти для размещения данных, указанного количества и типа. При нехватке памяти результат равен NULL.

¼

double *x;

int i, n;

puts(" Введите размер массива: ");

scanf(“%d”, &n);

x = new double [n];

if (x = = NULL) {

puts(" Ошибка! ");

return;

}

for (i=0; i<n; i++) // Ввод элементов массива

scanf(“%lf”, &x[i]);

¼ // Обработка массива

delete [ ]x; // Освобождение памяти

¼

Пример создания двухмерного динамического массива

Напомним, при создании двухмерного динамического массива сначала выделяется память на указатели, расположенные последовательно друг за другом, а затем каждому из них выделяется соответствующий участок памяти под элементы.

...

int **m, n1, n2, i, j;

puts(" Введите размеры массива (строк, столбцов): ");

scanf(“%d%d”, &n1, &n2);

m = new int*[n1]; // Захват памяти для указателей – А (n1=3)

for (i=0; i<n1; i++) // Захват памяти для элементов

*(m+i) = new int[n2];

for (i=0; i<n1; i++)

for (j=0; j<n2; j++)

m[i] [j] = i+j; // *(*(m+i)+j) = i+j;

...

for (i=0; i<n1; i++) // Освобождение памяти

delete []m[i];

delete []m;

...

 

 

Дополнительные возможности при работе с пользовательскими функциями

Параметры со значениями по умолчанию

Чтобы упростить вызов функции, в ее заголовке можно указать значения параметров по умолчанию. Эти параметры должны быть последними в списке и при вызове функции аргументы для них могут опускаться. Если при вызове аргумент опущен, то должны отсутствовать и все аргументы, стоящие за ним, т.к. задавать значения по умолчанию можно только для последних параметров в списке функции.

В качестве значений параметров по умолчанию могут использоваться константы или константные выражения.

Параметр по умолчанию проходит проверку типа во время описания функции и вычисляется во время ее вызова.

Пример участка кода функции, определяющей сумму переменных отношений от 2-х до 5-ти:

...

int sum(int a, int b, int c=0, int d=0, int e=0) { // 0 – умалчиваемые значения

return (a+b+c+d+e);

}

int main ()

{

int x1=1, x2=2, x3=3, x4=4, x5=5;

int y2, у3, у4, у5;

у2= Sum (х1, х2); // Работают все умалчиваемые значения;

у3= Sum (х1, х2, х3); // – два последних значения;

у4= Sum (х1, х2, х3, х4); // – одно последнее значение;

у5= Sum (х1, х2, х3, х4, х5)

...

return 0;

}

Таким образом:

1. Умалчиваемое значение аргумента функции задается при его объявлении в заголовке функции.

2. В начале списка указывают параметры, значения которых будут передаваться всегда.

3. При обращении пропуск умалчиваемых параметров в списке недопустим, т.е. для получения значения x 1 + x 2 + x 3 + x 5 вызов функции Sum (х 1, х 2, х 3, х 5); приведет к ошибочному результату.

Правильным будет обращение Sum (x 1, x 2, x 3, 0, x 5);

Перегрузка функций

В языке С++ реализована возможность использования одного идентификатора для функций, выполняющих различные действия над различными типами данных, в результате чего можно использовать несколько функций с одним и тем же именем, но с разными списками параметров, как по количеству, так и по типу.

Такие функции называют перегруженными, а сам механизм – перегрузка функций.

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

Поиск функции, которую надо вызвать, осуществляется за три отдельных шага:

1. Поиск функции с точным соответствием параметров и ее использование, если она найдена.

2. Поиск соответствующей функции, используя встроенные преобразования типов данных.

3. Поиск соответствующей функции, используя преобразования, определенные пользователем.

Пример перегрузки функций

Приведем пример функции S 1 с двумя параметрами х, у, работающая в зависимости от типа передаваемых аргументов, следующим образом:

– если тип параметров целочисленный, функция S 1 складывает их значения и возвращает полученную сумму;

– если тип параметров long, функция S 1 перемножает их значения и возвращает полученное произведение;

– если тип параметров вещественный, функция S 1 делит их значения и возвращает частное от деления.

# include <stdio.h>

int S1 (int x, int y) {

return x+y;

}

long S1 (long x, long y) {

return x*y;

}

double S1 (double x, double y) {

return x/y;

}

int main ()

{

int a = 1, b = 2, c;

long i = 3, j = 4, k;

double x = 10, y = 2, z;

c=S1(a, b);

k=S1(i, j);

z=S1(x, y),

printf("\n c = %d; k = %ld; z = %lf. \n", c, k, z);

return 0;

}

В результате получим:

c = 3; k = 12; z = 5.000000.

 





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 516 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Надо любить жизнь больше, чем смысл жизни. © Федор Достоевский
==> читать все изречения...

2355 - | 2036 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.