Перегрузка функций в C ++: все, что вам нужно знать



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

C ++ - один из тех языков программирования, который очень гибок и также охватывает несколько функций объектно-ориентированного программирования. Перегрузка - еще одна особенность этого языка программирования.Следующие указатели будут рассмотрены в этой статье «Перегрузка функций в C ++».

Перегрузка C ++

Когда мы создаем два или более членов класса с одинаковым именем, но разными по количеству или типу параметров, это называется перегрузкой C ++. В C ++ мы можем перегрузить:





  • методы,
  • конструкторы и
  • индексированные свойства

Типы перегрузки в C ++

types-of-overloading-in-c++

Что такое перегрузка функций в C ++?

Перегрузка функций в C ++ может быть определена как процесс наличия двух или более функций-членов класса с одинаковым именем, но разными параметрами. При перегрузке функции функция может быть переопределена либо с использованием разных типов аргументов, либо с другим количеством аргументов в соответствии с требованиями. Только благодаря этим различиям компилятор может различать две перегруженные функции.



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

Изменяя количество аргументов

При таком способе перегрузки функций мы определяем две функции с одинаковыми именами, но разным количеством параметров одного типа. Например, в упомянутой ниже программе мы создали две функции add () для возврата суммы двух и трех целых чисел.

// определение первой функции int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

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



int main () {add (10, 20) // будет вызываться add () с двумя параметрами add (10, 20, 30) // sum () с тремя параметрами}
#include с использованием пространства имен std int add (int a, int b) {cout<< a+b <

В приведенном выше примере мы перегружаем функцию add (), изменяя количество ее аргументов. Сначала мы определяем функцию add () с двумя параметрами, затем мы перегружаем ее, снова определяя функцию add (), но на этот раз с тремя параметрами.

анонимный класс в java]

Имея разные типы аргументов

В этом методе мы определяем две или более функций с одинаковым именем и одинаковым количеством параметров, но типы данных, используемые для этих параметров, различаются. Например, в этой программе у нас есть три функции add (), первая получает два целочисленных аргумента, вторая получает два аргумента с плавающей запятой, а третья получает два аргумента типа double.

#include с использованием пространства имен std int add (int x, int y) // первое определение {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

В приведенном выше примере мы определяем функцию add () три раза. Сначала в качестве параметров используются целые числа, во-вторых, в качестве параметров используется число с плавающей запятой, а в-третьих, в качестве параметра используется double.
Таким образом, мы дважды переопределяем функцию add ().

Преимущества перегрузки функций в C ++

  • Мы используем перегрузку функций, чтобы сохранить пространство памяти, согласованность и удобочитаемость нашей программы.

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

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

  • Перегрузка функций ускоряет выполнение программы.

  • Перегрузка функций используется для повторного использования кода, а также для экономии памяти.

  • Это помогает приложению загрузить метод класса в зависимости от типа параметра.

  • Поддерживать код легко.

Недостатки перегрузки функций в C ++

  • Объявления функций, которые отличаются только типом возвращаемого значения, не могут быть перегружены процессом перегрузки функции.
  • Объявления функций-членов с одинаковыми параметрами или одинаковыми типами имен не могут быть перегружены, если какой-либо из них объявлен как статическая функция-член.
  • class XYZ {static void func () void func () // error}

Перегрузка функций и неоднозначность

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

  • Преобразование типов.
  • Функция с аргументами по умолчанию.
  • Функция с передачей по ссылке

Преобразование типов:

#include с использованием пространства имен std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

В приведенном выше примере возникает ошибка - «вызов перегруженной функции (double)» неоднозначен ». Функция (3.4) вызовет первую функцию. Функция (34) вызывает вторую функцию согласно нашему прогнозу. Но это не то, что происходит, потому что в C ++ все константы с плавающей запятой обрабатываются как double, а не как float. Если мы заменим переменную float на переменную типа double, программа будет работать нормально. Поэтому мы называем это ошибкой преобразования типа из float в double.

Функция с аргументами по умолчанию:

#include с использованием пространства имен std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

В приведенном выше примере появляется сообщение об ошибке «вызов перегруженного‘ fun (int) ’неоднозначен», потому что функцию (int y, int z = 12) можно вызывать двумя способами:

  1. Вызывая функцию с одним аргументом (и она автоматически принимает значение z = 12)
  2. Вызов функции с двумя аргументами.

Когда мы вызываем функцию: function (12), мы полностью заполняем условие как функции (int), так и функции (int, int), поэтому компилятор попадает в неоднозначность, показывает ошибку.

Функция с передачей по ссылке

#include с использованием пространства имен std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

Вышеупомянутая программа выдает сообщение об ошибке «вызов перегруженного‘ fun (int &) ’неоднозначен». Как мы видим, первая функция принимает один целочисленный аргумент, а вторая функция принимает в качестве аргумента ссылочный параметр. В этом случае компилятор не может понять, какая функция нужна пользователю, поскольку нет синтаксической разницы между fun (int) и fun (int &), поэтому он выдает ошибку неоднозначности.

как написать метод tostring в java

На этом мы подошли к концу перегрузки функций в C ++. Если вы хотите узнать больше, ознакомьтесь с от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы обучить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога, и мы свяжемся с вами как можно скорее.