Разница между функцией друга и виртуальной функцией в С++

Опубликовано: 14 Сентября, 2022

Класс друга может обращаться к закрытым и защищенным членам других классов, в которых он объявлен как друг. Иногда полезно разрешить определенному классу доступ к закрытым членам других классов. Вполне вероятно, что дружественная функция — это функция, которая объявлена вне области действия класса. Эта функция может вызываться как обычная функция и включать объекты в качестве аргументов. Он в основном используется для перегрузки <<и>> для ввода-вывода. Как правило, он может получить доступ к любому члену класса, с которым он является другом.

Иллюстрация:

class GFG  
{ 
 private: 
 {  
 Public: 
 {  
 friend void check();  
 }
  
void check();  

Теперь перейдем ко второй функции — функции виртуальной. Таким образом, виртуальная функция — это, по сути, функция-член класса, которая объявлена в базовом классе. В этом ключевое слово virtual используется для создания функции-члена базового класса Virtual. Он также поддерживает полиморфизм как во время компиляции, так и во время выполнения. Это также позволяет производному классу просто заменить реализацию, предоставленную или предоставленную базовым классом.

Иллюстрация:

class GFG  
{  
Public:  
          Virtual return_type function_name(arguments)  
         {  
         …..  
         }  
}:  
   class A  
  {  

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

Функция друга

Виртуальная функция

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