При переопределении функции дочерний класс переопределяет функцию, которая уже определена в его родительском классе.
Это позволяет программисту предоставлять специфичные для производных классов функциональные возможности (даже если они определены в базовом классе).
Теперь мы увидим несколько примеров и поймем концепцию переопределения функций в C ++.
Пример-1
В приведенном ниже примере кода я определил два класса - базовый класс и производный класс. Базовый класс имеет функцию-член, то есть disp (). Derived_Class наследуется от Base_Class. Функция disp () присутствует в Base_Class, а затем переопределяется в Derived_Class.
В функции main () создается объект Derived_Class, то есть d. Затем мы вызываем функцию disp () для объекта производного класса, поэтому будет вызвана функция в производном классе. Версия базового класса здесь игнорируется. Ниже вы можете увидеть вывод функции - disp () в производном классе.
#включаютиспользуя пространство имен std;
// базовый класс
класс Base_Class
{
общественный:
пустотапольза()
{
Стоимость<< 'функция disp () в базовом классе.' <<конец;
}
};
// производный класс
класс Derived_Class:общедоступный Base_Class
{
общественный:
пустотапольза()
{
Стоимость<< 'функция disp () в производном классе' <<конец;
}
};
intглавный()
{
Derived_Class d;
d.польза(); // функция disp () для объекта производного класса
возвращение 0;
}
Пример-2
В этом примере мы увидим, как намеренно вызвать версию функции базового класса через объект производного класса. В определении функции производного класса мы используем оператор разрешения области видимости [::] для вызова версии функции базового класса.
#включаютиспользуя пространство имен std;
класс Base_Class
{
общественный:
пустотапольза()
{
Стоимость<< 'функция disp () в базовом классе.' <<конец;
}
};
класс Derived_Class:общедоступный Base_Class
{
общественный:
пустотапольза()
{
Base_Class::польза(); // Вызов версии disp () базового класса
}
};
intглавный()
{
Derived_Class d;
d.польза();
возвращение 0;
}
Пример-3
Это еще один пример переопределения функции. В этом примере мы создали родительский класс - Animal и два производных класса - Duck и Dog. Базовый класс, то есть класс Animal, имеет функцию-член sound ().
В производном классе / дочернем классе, то есть Dog, мы переопределили ту же функцию, то есть sound (), чтобы переопределить определение ее базового класса. Точно так же в другом производном классе, то есть Duck, мы переопределили ту же функцию, то есть sound ().
В функции main () мы создали объект dog из Dog и утку из Duck. Итак, теперь, когда мы вызываем функцию sound () для dog и duck, будет вызвана версия производного класса функции sound (). Вы можете увидеть результат работы программы, как показано ниже. Итак, с помощью переопределения функции мы можем вызвать производную функцию, зависящую от класса.
#включаютиспользуя пространство имен std;
класс Animal
{
общественный:
пустотазвук()
{
Стоимость<< «Звук животного!» <<конец;
}
};
// Производный класс - Класс Dog
класс Dog:общественное животное
{
общественный:
пустотазвук()
{
Стоимость<< «Собачий звук - лай». <<конец;
}
};
// Производный класс - класс Duck
класс Утка:общественное животное
{
общественный:
пустотазвук()
{
Стоимость<< «Утиный звук - шарлатан». <<конец;
}
};
intглавный()
{
Собака Собака;
Утка утка;
собака.звук(); // звук () собаки
утка.звук(); // звук () утки
возвращение 0;
}
Заключение
В этой статье я объяснил переопределение функций в C ++ . Язык C ++ поддерживает полиморфизм времени выполнения. Переопределение функций помогает достичь полиморфизма времени выполнения в C ++. В этой статье была рассмотрена концепция переопределения функций и способы достижения полиморфизма во время выполнения с помощью переопределения функций.