C++ 动态绑定

C++ 动态绑定

编译器可以在运行时解析的绑定称为静态绑定。例如,所有的最终方法、静态方法和私有方法都是在运行时绑定的。所有重载的方法都使用静态绑定。

动态绑定的概念解决了静态绑定的问题。

C++ 动态绑定

动态绑定

绑定的一般含义是将某物连接到另一物。这里是将对象连接在一起。从编程角度来说,我们可以将绑定描述为将函数定义与函数调用相连。

所以动态绑定这个术语意味着在运行时选择特定的函数来运行。根据对象的类型,将调用相应的函数。

由于动态绑定提供灵活性,它避免了静态绑定的问题,因为静态绑定发生在编译时,并将函数调用与函数定义相连。

动态绑定的使用

除此之外,动态绑定还帮助我们使用单个函数名来处理不同的对象。它还降低了复杂性,并帮助开发人员调试代码和错误。

如何实现动态绑定?

动态编程的概念是通过虚函数来实现的。

虚函数

在基类中声明并在子类中重写(重新定义)的函数被称为虚函数。当我们使用指针或引用指向基类引用派生类对象时,我们可以为该对象调用虚函数并执行派生类的版本。

特征

  • 运行时函数解析
  • 用于实现运行时多态性
  • 所有虚函数都声明在基类中
  • 无论用于函数调用的指针(引用)是什么,都可以确保对一个对象调用正确的函数。
  • 虚函数不能声明为静态函数
  • 虚函数没有虚构造函数,但可以有虚析构函数。
  • 虚函数的定义在基类中,派生类中进行重写。
  • 虚函数可以是另一个类的友元。

现在让我们看一个没有虚关键字时会出现的问题。

示例

让我们以一个具有final_print()函数的类A为例,类B公开继承A。B也有它自己的final_print()函数。

如果我们创建一个A的对象并调用final_print(),它将运行基类的函数,而如果我们创建一个B的对象并调用final_print(),它将仍然运行基类的函数。

代码

#include 
using namespace std;
class A {
public:
    void final_print() // function that call display
    {
display();
    }
    void display() // the display function
    {
cout<< "Printing from the base class" <

输出

Printing from the base class
Printing from the base class    

现在让我们使用虚函数来解决这个问题。

代码

#include 
using namespace std;
class A {
public:
    void final_print() // function that call display
    {
display();
    }
virtual  void display() // the display function
    {
cout<< "Printing from the base class" <

输出

Printing from the base class
Printing from the derived class   

因此,动态绑定使用虚函数将函数调用与函数定义链接起来。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程