Динамическое связывание в 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++?

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