Аргументы по умолчанию и виртуальная функция в C++
Аргументы по умолчанию — это значения, предоставляемые во время объявления функции, так что значения могут быть назначены автоматически, если им не передан аргумент. В случае передачи любого значения значение по умолчанию переопределяется и становится параметризованным аргументом.
Виртуальная функция — это функция-член, объявленная в базовом классе и переопределяемая (переопределяемая) производным классом. Когда вы ссылаетесь на объект производного класса с помощью указателя или ссылки на базовый класс, вы можете вызвать виртуальную функцию для этого объекта и выполнить версию функции производного класса. Виртуальная функция также подпадает под полиморфизм времени выполнения.
Чтобы увидеть комбинированное применение аргументов по умолчанию с виртуальными функциями, давайте возьмем образец
Пример:
Выход:
Derived::fun(), x = 0
Если мы внимательно посмотрим на вывод, то увидим, что вызывается функция fun() производного класса и используется значение по умолчанию функции fun() базового класса.
Аргументы по умолчанию не участвуют в подписи (имя функции, тип и порядок) функций. Таким образом, сигнатуры функции « fun() » в базовом классе и производном классе считаются одинаковыми, поэтому функция « fun() » базового класса переопределяется . Кроме того, значение по умолчанию используется во время компиляции. Когда компилятор видит отсутствующий аргумент в вызове функции, он заменяет данное значение по умолчанию. Поэтому в приведенной выше программе значение x подставляется во время компиляции, а во время выполнения вызывается функция fun() производного класса.
Пример:
Вывод этой программы такой же, как и у предыдущей программы. Причина та же, значение по умолчанию подставляется во время компиляции. Fun() вызывается для 'bp', который является указателем базового типа. Поэтому компилятор подставляет 0 (а не 10).