Если у нас есть функция в базовом классе и функция с тем же именем в производном классе, может ли функция базового класса быть вызвана из объекта производного класса? Это интересный вопрос, и в качестве эксперимента можно предсказать вывод следующей программы на C ++ .
|
Выход этой программы:
f(double): 6.3 f(double): 6.6
Вместо предполагаемого вывода:
f(int): 6 f(double): 6.6
Перегрузка не работает для производного класса в языке программирования C ++. Между Base и Derived нет разрешения перегрузки. Компилятор смотрит в область действия Derived, находит единственную функцию «double f (double)» и вызывает ее. Это никогда не мешает (охватывая) объемом Base. В C ++ нет перегрузки между областями — области производных классов не являются исключением из этого общего правила. (Смотрите это для большего количества примеров)
Ссылка: технические часто задаваемые вопросы на www.stroustrup.com
Теперь рассмотрим Java- версию этой программы:
|
Вывод вышеуказанной программы:
f (int): 6 f (double): 6.6
Таким образом, в Java перегрузка работает в разных областях, в отличие от C ++. Компилятор Java определяет правильную версию перегруженного метода, который должен быть выполнен во время компиляции, на основе типа аргумента, используемого для вызова метода, и параметров перегруженных методов обоих этих классов получают значения аргументов, используемых в вызове, и выполняет перегруженный метод.
Наконец, давайте попробуем вывод следующей программы на C # :
|
Примечание. Console.ReadKey () используется для остановки консоли. Это похоже на getch как в C / C ++.
Вывод вышеуказанной программы:
f(double) : 6.3 f(double): 6.6
вместо предполагаемого выхода
f(int) : 6 f(double) : 6.6
Причина та же, что и в программе на C ++. Как и в C ++, между классом Base и классом Derived нет разрешения перегрузки. В C # нет перегрузки между областями действия. Производные области классов не являются исключением из этого общего правила. Это то же самое, что и C ++, потому что C # разработан, чтобы быть намного ближе к C ++, согласно Андерсу Хейлсбергу, создателю языка C #.
Эта статья предоставлена Pravasi Meet . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме
Рекомендуемые посты:
- Как работает вектор в C ++?
- Как работает устройство Даффа?
- Перегрузка конструктора в C ++
- Перегрузка функций в C ++
- Перегрузка операторов в C ++
- Типы перегрузки операторов в C ++
- Поддерживает ли C перегрузку функций?
- C ++ | Перегрузка оператора | Вопрос 5
- C ++ | Перегрузка оператора | Вопрос 6
- C ++ | Перегрузка оператора | Вопрос 7
- C ++ | Перегрузка оператора | Вопрос 9
- C ++ | Перегрузка оператора | Вопрос 10
- C ++ | Перегрузка оператора | Вопрос 10
- Перегрузка операторов New и Delete в c ++
- Правила перегрузки операторов
0.00 (0%) 0 votes