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

Параметры функции по умолчанию

Читайте также:
  1. II. Основные задачи и функции
  2. II. Признаки, ресурсы и функции власти.
  3. II. Функции
  4. II.Синдром дисфункции синусового узла (СССУ) I 49.5
  5. III. Органы, объединяющие эндокринные и неэндокринные функции
  6. III. Функции политологии. Возрастание роли политических знаний в жизни общества.
  7. III. Функции Совета

Если для некоторых аргументов функции можно указать наиболее часто

используемые значения, то С++ позволяет это сделать, избавляя программиста от

Необходимости указывать их каждый раз при обращении. При описании функции

параметры, имеющие значения по умолчанию, должны располагаться в конце списка параметров. Эти значения будут использованы при вызове функции, если соответствующие параметры окажутся опущенными. Для этого после имени параметра через символ '=' указывается его значение "по умолчанию". Например, у нас есть следующее описание функции:

void print(MATRIX A, char * format = "%9.4f", char * title = NULL);

После этого возможны следующие обращения к функции print:

Print(C);

print(C,"%12.7e");

print(C,"%12.7e","__Матрица С__);

Неопределенное число параметров

Существуют функции, в описании которых невозможно указать число и типы

Всех допустимых параметров. Тогда список формальных параметров завершается

многоточием..., что означает: "и, возможно, еще несколько аргументов". Например:

int printf(const char*,...);

При вызове printf обязательно должен быть указан параметр типа char*,

однако могут быть (а могут и не быть) еще другие параметры. Например:

printf("Hello, world\n");

printf("My name is %s %s\n", first_name, second_name);

printf("%d + %d = %d\n", 2,3,5);

Такие функции пользуются для распознавания своих фактических параметров недоступной транслятору информацией. В случае функции printf, первый параметр обязателен и является форматной строкой. Она может содержать спецификаторы вывода, которые позволяют функции правильно снимать значения аргументов со стека, которые были туда загружены при обращении к ней. Например, %s означает -"будет фактический параметр типа char*", %d означает -"будет фактический параметр типа int". Но транслятор этого не знает, и поэтому он не может убедиться, что объявленные параметры действительно присутствуют в вызове и имеют соответствующие типы. Например, следующий вызов

char Name[]="Sasha";

printf("My name is %s%d",Name);

Нормально транслируется, но приведет (в лучшем случае) к неверному результату при печати.

Очевидно, что раз параметр не описан, то транслятор не имеет сведений для контроля и стандартных преобразований типа этого параметра.

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

Int sum(int n,...)

{

int *p=&n+1,s=0,i;

for(i=1;i<=n;i++,p++)

s+=*p;

Return s;

}


Дата добавления: 2015-07-07; просмотров: 141 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Данная функция может печатать содержимое двухмерных массивов с любой первой размерностью.| Указатель на функцию

mybiblioteka.su - 2015-2024 год. (0.007 сек.)