Разница между функцией друга и виртуальной функцией в С++
Класс друга может обращаться к закрытым и защищенным членам других классов, в которых он объявлен как друг. Иногда полезно разрешить определенному классу доступ к закрытым членам других классов. Вполне вероятно, что дружественная функция — это функция, которая объявлена вне области действия класса. Эта функция может вызываться как обычная функция и включать объекты в качестве аргументов. Он в основном используется для перегрузки <<и>> для ввода-вывода. Как правило, он может получить доступ к любому члену класса, с которым он является другом.
Иллюстрация:
class GFG { private: { Public: { friend void check(); } void check();
Теперь перейдем ко второй функции — функции виртуальной. Таким образом, виртуальная функция — это, по сути, функция-член класса, которая объявлена в базовом классе. В этом ключевое слово virtual используется для создания функции-члена базового класса Virtual. Он также поддерживает полиморфизм как во время компиляции, так и во время выполнения. Это также позволяет производному классу просто заменить реализацию, предоставленную или предоставленную базовым классом.
Иллюстрация:
class GFG { Public: Virtual return_type function_name(arguments) { ….. } }: class A {
До сих пор мы ясно обсуждали функцию друга и виртуальную функцию, теперь давайте посмотрим на основные различия между ними, даже чтобы понять их.
Функция друга | Виртуальная функция |
---|---|
Это функции, не являющиеся членами, которые обычно имеют закрытый доступ к представлению класса. | Это функция базового класса, которая может быть переопределена производным классом. |
Он используется для доступа к закрытым и защищенным классам. | Он используется для обеспечения того, чтобы для объекта вызывалась правильная функция, независимо от того, какое выражение используется для создания функционального класса. |
Он объявлен вне области видимости класса. Он объявляется с помощью ключевого слова ' friend' . | Он объявляется внутри базового класса и обычно переопределяется производным классом. Он объявляется с использованием ключевого слова « виртуальный ». |
Обычно он используется для предоставления функции, не являющейся членом, доступа к скрытым членам класса. | Обычно требуется указать компилятору выполнить динамическую компоновку поздней привязки к функции. |
Они поддерживают совместное использование информации о классе, которая ранее была скрыта, предоставляют метод обхода ограничений, скрывающих данные C++, могут получать доступ к членам без наследования класса и т. д. | Они поддерживают объектно-ориентированное программирование, гарантируют, что функция переопределена, может быть другом другой функции и т. д. |
Он может получить доступ к закрытым членам класса, даже если не является членом этого класса. | Он используется для того, чтобы полиморфизм мог работать. |