Что означает «Перегрузка» / «Перегрузка» / «Перегрузка»?

StackOverflow https://stackoverflow.com/questions/289997

  •  08-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

Другие советы

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

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

Например, Класс System.DateTime в c # имеет более одного метода 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, если вы передаете десятичный параметр, и вызывает строковую версию, если вы передаете строковый параметр. Из списка возможных выходных данных, если компилятор не может найти подходящий для вызова, вы получите ошибку компилятора, например " Наилучшая перегрузка не соответствует параметрам ... ".

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

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

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

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

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

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

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

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

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

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

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

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.");
    }
}

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

foo(foo)

foo(foo, bar)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top