迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > C++ >

C++ 中的虚函数

作者:迹忆客 最近更新:2023/08/23 浏览次数:

本文将介绍 C++ 中的虚函数。 虚函数是特殊的成员函数,它们被声明的派生函数重载或重写,但在基类中定义和声明。


C++ 中的虚函数

关键字 virtual 位于基类中函数声明之前。 这使得编译器进行后期绑定,也称为函数上的动态链接。

运行时编译器的后期绑定或动态链接决定对象类型并绑定函数调用。 简而言之,它是一种在运行时解析函数调用的绑定类型。

使用这些函数可以实现运行时多态性。 因此,每当 C++ 中的函数被设为虚拟时,编译器都会在运行时根据基类指针指向的对象来决定必须调用哪个函数。

示例代码:

#include <bits/stdc++.h>
using namespace std;

class demo {
    public:

    virtual void fun()
    {
        cout<<"Inside the base class\n";
    }

    void check()
    {
        cout<<"Base class function\n";
    }



};


class derived: public demo
{
    public:
        void fun()
        {
            cout<<"Inside the derived class\n";
        }


        void check()
        {
            cout<<"Derived class fuction\n";
        }

};


int main()
{
   demo *ptr;
   derived d;
   ptr = &d;

   ptr->fun();

   ptr->check();

}

输出:

Inside the derived class
Base class function

在上面的代码中,由于ptr->fun()是一个虚函数,所以它在运行时绑定,而ptr->check()是一个非虚函数,所以它在编译时绑定。 这里,运行时多态性是使用基类指针实现的,该指针指向派生类的对象。


C++ 中虚函数的规则

使用虚拟函数时,我们必须牢记以下规则。

  1. 我们不能有虚拟构造函数,但可以有虚拟析构函数。 使用虚拟析构函数可确保派生类对象以正确的顺序被销毁; 首先,基类对象被销毁,然后派生类对象被销毁。

    示例代码:

    #include <bits/stdc++.h>
    using namespace std;
    class demo {
     public:
     demo()
     {
         cout<<"Constructing base class\n";
     }
     virtual ~demo()
     {
         cout<<"Destroying base class\n";
     }
    };
    class derived: public demo
    {
     public:
      derived()
      {
         cout<<"Constructing derived class\n";
      }
     virtual ~derived()
     {
         cout<<"Destroying the derived class\n";
     }
    };
    int main()
    {
    demo *ptr;
    derived *derivedPtr = new derived();
    
    ptr = derivedPtr;
    
    delete ptr;
    }
    

    输出:我们可以观察到遵循了正确的构建和销毁顺序。

    Constructing base class
    Constructing derived class
    Destroying the derived class
    Destroying base class
    
  2. 当我们想要实现运行时多态性时,只有基类指针或基类引用应该与虚函数一起使用。

  3. 虚函数永远不可能是静态的。

  4. 基类和派生类中的虚函数原型应保持相同。

  5. 虚函数也可以是另一个类的友元函数。


了解 C++ 中的纯虚函数

这些函数是原始虚函数的细微变化。 纯虚函数是不执行任何操作的虚函数。

句法:

virtual void fun() = 0

纯虚函数用于创建抽象类。 这些类的对象无法被创建,从这些类派生的类应该重写纯虚函数; 否则,它们也将被视为抽象类。

示例代码:

#include <bits/stdc++.h>
using namespace std;

class demo {
    public:

    virtual void fun()=0;


};


class derived: public demo
{
    public:
     void fun() //overriding the function
     {
         cout<<"Inside the derived class";
     }

};


int main()
{
   demo *ptr;

   // demo d;  This will give compile error as base class demo is abstract class

   derived d;
   ptr = &d;

   ptr->fun();


}

输出:

Inside the derived class

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Arduino 中停止循环

发布时间:2024/03/13 浏览次数:444 分类:C++

可以使用 exit(0),无限循环和 Sleep_n0m1 库在 Arduino 中停止循环。

Arduino 复位

发布时间:2024/03/13 浏览次数:315 分类:C++

可以通过使用复位按钮,Softwarereset 库和 Adafruit SleepyDog 库来复位 Arduino。

Arduino 的字符转换为整型

发布时间:2024/03/13 浏览次数:181 分类:C++

可以使用简单的方法 toInt()函数和 Serial.parseInt()函数将 char 转换为 int。

Arduino 串口打印多个变量

发布时间:2024/03/13 浏览次数:381 分类:C++

可以使用 Serial.print()和 Serial.println()函数在串口监视器上显示变量值。

Arduino if 语句

发布时间:2024/03/13 浏览次数:123 分类:C++

可以使用 if 语句检查 Arduino 中的不同条件。

Arduino ICSP

发布时间:2024/03/13 浏览次数:214 分类:C++

ICSP 引脚用于两个 Arduino 之间的通信以及对 Arduino 引导加载程序进行编程。

使用 C++ 编程 Arduino

发布时间:2024/03/13 浏览次数:127 分类:C++

本教程将讨论使用 Arduino IDE 在 C++ 中对 Arduino 进行编程。

Arduino 中的子程序

发布时间:2024/03/13 浏览次数:168 分类:C++

可以通过在 Arduino 中声明函数来处理子程序。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便