Динамическое связывание в C++: объяснение, функции и реализация
Опубликовано: 2021-02-04Оглавление
Введение
В этой статье мы познакомим вас с работой динамического связывания в C++ . Ожидается, что у вас есть базовые знания о работе наследования и статического связывания в C++. Это связано с тем, что некоторые ограничения статической привязки снимаются динамической привязкой. Мы покажем вам, наряду с правильными и простыми кодами, насколько полезно динамическое связывание.
Что такое динамическое связывание?
Под связыванием мы обычно подразумеваем связывание одного объекта с другим. С точки зрения языков программирования связывание не сильно отличается. Это связь определения функции и вызова функции. Но почему «динамический»? Проще говоря, динамическое связывание просто откладывает выбор или выбор функции для запуска до ее выполнения. Используя динамическую привязку в C++ , мы выбираем, какую функцию мы можем выполнить, основываясь на базовом типе объекта.
Эта гибкость не была предоставлена программистам со статической привязкой. Статическая привязка происходила во время компиляции, а не во время выполнения. Кроме того, статическое связывание связывает вызов функции и определение во время компиляции, тогда как, как вы теперь знаете, динамическое связывание не делает этого до времени выполнения.
Динамическое связывание позволяет нам игнорировать различия типов, предоставляя нам гибкость в выборе типа функции, которая нам нужна в данный момент времени выполнения. Изучив этот оператор, мы можем понять, что динамическое связывание позволяет нам обрабатывать различные объекты, используя только одно имя функции. Это снижает сложность кода, а также облегчает программисту процесс отладки.
Виртуальные функции
Мы много говорили о динамическом связывании в C++ . Но как это сделать? Чтобы реализовать динамическую привязку в коде C++, вам необходимо использовать «виртуальные функции». Так что же такое виртуальные функции?
В этой статье мы не будем подробно рассматривать виртуальные функции, поскольку они достаточно важны для отдельной статьи. Но вам будет предоставлено достаточно информации о виртуальных функциях, чтобы четко понять динамическое связывание.

Виртуальные функции — это специальные функции-члены, вызовы которых через указатель (или ссылку) разрешаются во время выполнения в зависимости от типа объекта с указателем. Проще говоря, если вы определяете виртуальную функцию в базовом классе, вы можете переопределить функцию в производных классах.
В этом сила виртуальных функций. В C++ вы определяете виртуальную функцию, используя ключевое слово «виртуальный» в начале определения функции. Возможно, вам не придется повторять ключевое слово virtual для каждого производного класса базового класса, потому что, как только функция объявлена «виртуальной», она останется «виртуальной» во всех производных классах.
Реализация С++
Речь идет о виртуальных функциях. Теперь давайте рассмотрим программу для понимания динамического связывания в C++ :
Программа №1 :
Мы видим два класса: класс A — это «базовый» класс, тогда как класс B — это «производный класс». Внутри обоих классов есть одна функция с тем же именем display. В родительском классе есть еще одна функция с именем final_print(), вызывающая функцию display(). В функции main() мы создаем два разных объекта для двух разных классов, вызывая одну и ту же функцию display().
Давайте посмотрим на вывод вышеуказанной программы.
Вывод для программы №1:

Как и ожидалось, вывод выполняет функцию display() базового класса два раза, как это определено во время компиляции (статическая привязка). Но это не тот результат, который мы хотели.
Теперь, чтобы преобразовать приведенный выше код в код с динамической привязкой, нам нужно использовать виртуальные функции. Давайте посмотрим, как это сделать.
Программа №2:
Мы просто добавляем ключевое слово «виртуальный» для обеих наших функций display() в классе A и классе B, тем самым делая их виртуальными функциями. Это единственное необходимое изменение. Как и раньше, мы вызываем одну и ту же функцию final_print(), используя два разных объекта. Посмотрим, какой результат мы получим сейчас.

Вывод для программы №2 :
Это тот результат, который нам нужен, и мы получили его с помощью динамического связывания функций.
Изучайте онлайн-курсы по программному обеспечению от лучших университетов мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
Заключение
В этой статье мы рассмотрели концепцию динамического связывания в C++ . Подводя итог, динамическая привязка дает нам гибкость, вызывая одну функцию для обработки разных объектов. Как видно из нашего кода, мы вызвали одну и ту же функцию display(), создав два разных объекта для получения двух разных выходных данных. Это возможно, потому что динамическое связывание происходит во время выполнения, в отличие от статического связывания, которое происходит во время компиляции.
Если вам интересно узнать больше о разработке полного стека, ознакомьтесь с программой Executive PG upGrad и IIIT-B по разработке программного обеспечения с полным стеком, которая предназначена для работающих профессионалов и предлагает более 500 часов тщательного обучения, более 9 проектов и заданий. , статус выпускника IIIT-B, практические практические проекты и помощь в трудоустройстве в ведущих фирмах.
Что такое язык программирования С++?
C++ — это язык программирования общего назначения. Это один из самых широко используемых языков программирования в мире. C++ — это расширенная версия языка C, предоставляющая средства, облегчающие объектно-ориентированное программирование. C++ — это язык программирования общего назначения, а C — язык программирования специального назначения. C++ был создан как расширение C для поддержки объектно-ориентированного программирования и используется для разработки настольных приложений, приложений для мобильных устройств, встроенных систем и систем реального времени, а также веб-приложений и сервисов. C++ — императивный, процедурный, мультипарадигменный, компилируемый язык программирования общего назначения. Он поддерживает структурное программирование, объектно-ориентированное программирование и обобщенное программирование. Он имеет динамическую систему типов и явное управление памятью.
Что такое объектно-ориентированное программирование?
ООП — это способ создания повторно используемого, простого в обслуживании и читаемого кода. Короче говоря, ООП — это парадигма программирования, основанная на разработке программного обеспечения для объектов реального мира. Например, в Java, если вы хотите разработать программу для работы с книгами, вы создаете класс с именем Book, а затем создаете отдельные экземпляры (объекты) этого класса, представляющие одну книгу. То же самое относится и к другим классам, которые вам нужно создать в программе.
Что такое динамическое связывание в C++?
Динамическое связывание связывает значение идентификатора в тексте программы с определением этого идентификатора, найденным во время выполнения. Эта смысловая ассоциация называется связыванием. Это фундаментальный принцип объектно-ориентированного программирования. Динамически связанные идентификаторы — это ветви и листья иерархии объектно-ориентированных классов. Они являются динамическими, потому что разрешаются во время выполнения, а не во время компиляции. Ветви и листья объектно-ориентированной иерархии классов являются динамическими, поскольку они связаны с производными от них классами.