Что означает "перегрузка" / "перегрузка" / "перегрузка" ?

Что означает "перегрузка" / "перегрузка" в отношении программирования?

Ответы

Ответ 1

Это означает, что вы предоставляете функцию (метод или оператор) с тем же именем, но с другой подписью. Например:

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);

Ответ 2

Основная концепция

Перегрузка или "перегрузка метода" - это название понятия наличия нескольких методов с тем же именем, но с разными параметрами.

Например, Класс System.DateTime в С# содержит более одного метода ToString. Стандартный ToString использует культуру по умолчанию для системы, чтобы преобразовать дату и время в строку:

new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America

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

new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"

Иногда имя параметра может быть одинаковым, но типы параметров могут отличаться:

Convert.ToInt32(123m);

преобразует десятичное число в int, а

Convert.ToInt32("123");

преобразует строку в int.

Разрешение перегрузки

Для поиска лучшей перегрузки для вызова компилятор выполняет операцию с именем "разрешение перегрузки". В первом примере компилятор может найти лучший метод просто путем сопоставления счетчика аргументов. Во втором примере компилятор автоматически вызывает десятичную версию метода replace, если вы передаете десятичный параметр и вызывается строковая версия, если вы передаете строковый параметр. Из списка возможных выходов, если компилятор не может найти подходящего для вызова, вы получите ошибку компилятора, например: "Наилучшая перегрузка не соответствует параметрам...".

Вы можете найти много информации о том, как разные компиляторы выполняют разрешение перегрузки.

Ответ 3

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

void print(int i);
void print(char i);
void print(UserDefinedType t);

В этом случае функция print() будет иметь три перегрузки.

Ответ 4

Это означает, что имеют разные версии той же функции, которые принимают разные типы параметров. Такая функция "перегружена". Например, выполните следующую функцию:

void Print(std::string str) {
  std::cout << str << endl;
}

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

void Print(int i) {
  std::cout << i << endl;
}

Теперь функция перегружена, и какая версия функции будет вызываться, зависит от параметров, которые вы ей даете.

Ответ 5

Другие ответили, что такое перегрузка. Когда вы начинаете, это путается с переопределением/переопределением.

В отличие от перегрузки переопределение определяет метод с той же сигнатурой в подклассе (или дочернем классе), который переопределяет реализацию родительских классов. Некоторый язык требует явной директивы, такой как virtual функция-член в С++ или override в Delphi и С#.

using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

Ответ 6

Перегруженный метод - это один вариант с несколькими параметрами для числа и типа параметров. Например:

foo(foo)

foo(foo, bar)

оба будут делать относительно одно и то же, но у одного есть второй параметр для дополнительных опций

Также вы можете использовать один и тот же метод для разных типов

int Convert(int i)
int Convert(double i)
int Convert(float i)

Ответ 7

Как и в обычном использовании, он ссылается на что-то (в данном случае на имя метода), выполняя несколько заданий.

Ответ 8

Перегрузка - это версия бедного человека multimethods из CLOS и других языков. Это запутанное.

Переопределение является обычным OO. Это связано с наследованием, мы также называем это переопределением (например, в fooobar.com/info/360479/... Line предоставляет специализированное определение Draw().