Как пропустить один из аргументов функции?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Seric29
777
Seric29  

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

void Funcziya(int &Mas[], int &Mass[][],int q,int e ) предположим что я не хочу указывать один из её аргументов и в этом случае будут использоваться настройки по умолчанию. Например мне не обязательно обрабатывать этот массив int &Mas[], который является аргументом функции, я хочу оставить пробел т.е. аргумент будет пустой или вписать туда 0, благодаря настройкам по умолчанию машина проверит что аргумент функции пропущен или указано пустое значение или 0 и в этом случае рассчитываться этот аргумент внутри функции не будет потому что он не указан т.к. не обязателен в расчётах, а если будет указан то будет рассчитан. Каким образом можно пропустить аргумент функции, или указать на то, что он пропущен и как провести такую проверку на то, что данный аргумент пропущен чтобы программа не брала его в учёт?

Ihor Herasko
21905
Ihor Herasko  

Вместо массива нельзя ставить 0. Но никто не запрещает передачу пустого массива. Внутри функции в любом случае будет проверяться размер массива. Если размер нулевой, то что можно рассчитать? Так что проблемы нет.

void MyFunc(int &array[])
{
   int nSum = 0;
   for (int i = ArraySize(array) - 1; i >= 0; --i)
      nSum += array[i];
}

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

void MyFunc(int nA = 1, int nB = 2, int nC = 3)
{
 ...
}

Вызов:

MyFunc(10); // nA = 10, nB = 2, nC = 3
MyFunc(20, 30); // nA = 20, nB = 30, nC = 3
Seric29
777
Seric29  
Ihor Herasko:

Вместо массива нельзя ставить 0. Но никто не запрещает передачу пустого массива. Внутри функции в любом случае будет проверяться размер массива. Если размер нулевой, то что можно рассчитать? Так что проблемы нет.

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

Я так и сделал создал подставные массивы но о пропуске простых аргументов я не знал. Tсли пропущен простой аргумент как проверить что его нет он будет равен 0 или чему? И кстати функция 

ArraySize(array)

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

ArrayRange()

она работает нормально.

Ihor Herasko
21905
Ihor Herasko  
Seric29:

Я так и сделал создал подставные массивы но о пропуске простых аргументов я не знал. Tсли пропущен простой аргумент как проверить что его нет он будет равен 0 или чему?

Он будет равен значению, указанному по умолчанию.

И кстати функция 

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

она работает нормально.

В каком смысле "не работает"?

ArrayRange возвращает количество элементов в указанном измерении массива, а ArraySize - общее количество элементов в массиве:

   datetime array[10][20];
   Alert("Size: ", ArraySize(array), ", Range: ", ArrayRange(array, 0));  // Size: 200, Range: 10
Seric29
777
Seric29  
Ihor Herasko:

Он будет равен значению, указанному по умолчанию.

В каком смысле "не работает"?

ArrayRange возвращает количество элементов в указанном измерении массива, а ArraySize - общее количество элементов в массиве:

У меня если вызвать функцию ArraySize в пользовательской функции написанных самостоятельно возвращает всегда 0. Поэтому я использую ArrayRange(array, 0)); вот такие записи.

Dmitry Fedoseev
57691
Dmitry Fedoseev  
Seric29:

У меня если вызвать функцию ArraySize в пользовательской функции написанных самостоятельно возвращает всегда 0. Поэтому я использую ArrayRange(array, 0)); вот такие записи.

Да не может быть, разве только всегда и передаете в функцию массив размером 0.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий