Переопределение функций C ++

C Function Overriding



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

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







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



Теперь мы увидим несколько примеров и поймем концепцию переопределения функций в 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 ++. В этой статье была рассмотрена концепция переопределения функций и способы достижения полиморфизма во время выполнения с помощью переопределения функций.