Такой вопрос, (я только учусь, так что не бейте) есть функция, которая удаляет элемент из массива:
void arrayEditingDel(int *&arr, int &size, int numdel){}
Есть та, которая добавляет:
void arrayEditingAdd(int *&arr, int &size, int newValue){}
Почему бы не перегрузить одну функцию, вместо того, чтобы создавать две, верно?) Но мы ведь знаем, что перегружать функции можно либо по вз. типу, либо по кол-ву аргументов. И действительно, компилятор на попытку ругается:
void arrayEditing(int *&arr, int &size, int numdel){}
void arrayEditing(int *&arr, int &size, int newValue){}
В итоге, я своего добился, и перегрузку сделал:
void arrayEditing(int *&arr, int &size, int numdel){}
void arrayEditing(int *&arr, int &size, int numdel, int newValue){}
Но все это ценой бессмысленного действия (int numdel не используется при добавлении элемента в массив).
Вот собственно и вопрос: почему нельзя добавить возможность перегрузки по имени переменной? Компилятор спокойно, при вызове функции, сможет понять, какую реализацию ему задействовать. Или нет?
В общем, это несовершенство языка, или (скорее всего) моя некомпетентность?)
Перегрузку по имени параметра функций сделать нельзя. Причин тому, как минимум три:
Имя параметра не является обязательным, т.е. вполне валидна функция, определённая как void f(int)
. Для вызова требуется целочисленный параметр, но имени у него нет и достучаться до него переносимым способом нельзя.
Имя параметра может отличаться в объявлении (например, в .h-файле) и определении (например, .cpp-файле) функции.
// заголовочный файл
void f(int a);
// файл реализации
void f(int b) {
// do something
}
В месте вызова функции формальное имя параметра не используется. Например, объявление функции выглядит как void f(int a);
, а вызов такой:
int c = 42;
f(c);
Или даже такой:
f(42);
Если бы была возможность существовать одновременно нескольким функциям, типа void f(int a)
и void f(int b)
, то было бы совершенно неясно, какую из них следует вызывать.
Более того, если вернуться к вашей идее, то давать одинаковые имена функциям, делающий радикально разные действия, не очень хорошая мысль. Намного удобнее, когда действие сразу отражено в названии функции (Add
, Del
из вашего вопроса). В таком случае, не нужно переходить к месту определения/объявления и читать код или описание того, что же действительно делает функция, принимающая такие-то параметры в таком-то порядке.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Излазил вдоль и поперек форум(скорее всего чего-то не заметил)
не нашел четкого сравнения двух этих методов рисования виджетаОдин способ это рисовать все в paint()
Могу ли я динамически менять содержимое GroupBox таким способом