C++ 虚函数2025 年 5 月 1 日 | 阅读 8 分钟 在 C++ 中,**虚函数**是可由派生类重写的成员函数。它在基类中声明,并在派生类中重新定义。使用 virtual 关键字可以定义虚函数。 当我们在基类中声明函数时,我们可以使用指针和引用来调用虚类并在派生类中运行其虚函数。它也称为虚方法。 虚函数用于通知编译器对函数执行后期绑定或动态链接。它支持运行时多态性,允许使用虚表 (vtable) 和虚指针 (vptr) 动态解析函数调用。 语法它具有以下语法: 在此语法中,baseClass_name 表示基类的名称,funct_name 表示给定函数的名称。 C++ 虚函数示例让我们通过一个实例来演示 C++ 中的虚函数。 示例编译并运行输出 It is the print derived class method It is the show base class method 说明 在此示例中,我们创建了一个包含虚函数 print() 的基类 baseClass,它还包含一个非虚函数 show()。在 main() 函数中,基类指针 (bptr) 设置为指向派生类 (d1) 的对象。当执行 bptr->display() 时,将发生后期绑定,这意味着调用的函数是派生类中的重写函数。 虚函数规则C++ 中虚函数的几个规则如下:
虚表 (vTable) 和虚指针 (vPtr)在 C++ 中,虚表 (vTable) 是一个隐藏过程,主要用于使用虚函数实现运行时多态性。在虚函数中,每个类都有一个 vTable。该类的每个对象都有一个指向 vTable 的隐藏 vPtr。vTable 包含可对该类对象调用的虚函数的地址。 另一方面,虚指针是具有虚函数的类的每个对象中的隐藏指针。编译器将其作为成员函数包含在内。它用于指向该类的 vTable。当程序中调用虚函数时,VPTR 有助于在运行时在 VTable 中找到正确的函数地址。 C++ vTable 和 vPtr 示例让我们通过一个示例来演示 C++ 中的 vTable 和 vPtr。 示例编译并运行输出 RacingCar is starting with a loud roar! 说明 在此示例中,我们创建了一个基类 Car,它定义了一个虚函数 start(),该函数在派生类 RacingCar 中重写。在 main() 函数中,基类指针 carPtr 指向一个 RacingCar 对象。 当调用 carPtr->start() 时,使用 vTable 和 vPtr 发生后期绑定,导致在运行时执行 RacingCar 版本的 start()。 C++ 中的后期绑定/动态绑定在 C++ 中,后期绑定是一种在运行时解析函数调用的机制。它仅在通过指向基类的指针或引用调用虚函数时发生。因此,编译器在运行时确定对象的类型,然后绑定函数调用。 当通过指向基类的指针或引用对对象调用虚函数时,我们可以使用在运行时与实际对象连接的虚函数表 (vtable)。它允许我们执行正确的派生类。 C++ 后期绑定示例让我们通过一个示例来演示 C++ 中的后期绑定。 示例编译并运行输出 Dog color gray 说明 在此示例中,我们创建了一个基类 Animal,它定义了一个虚函数 display()。之后,派生类 Dog 重写了虚函数。ptr ->display() 函数调用后期绑定,并实现 Dog 类的 display() 函数,因为类型 dog() 是一个实际对象。 C++ 纯虚函数在 C++ 中,纯虚函数是没有实现的抽象方法。纯虚函数也称为“空操作”函数。它是在基类中声明的函数,相对于基类没有函数定义。 包含纯虚函数的类不能直接用于创建对象。这些类型的类称为抽象基类。基类的主要目的是向派生类提供特性,并创建用于实现运行时多态性的基指针。 语法 它具有以下语法: C++ 纯虚函数示例让我们通过一个示例来演示 C++ 中的纯虚函数。 示例编译并运行输出 Derived class is derived from the base class. 说明 在此示例中,基类包含纯虚函数。因此,基类是一个抽象基类。我们无法创建基类的对象。 C++ 中虚函数的优缺点C++ 中虚函数的几个优缺点如下: 虚函数的优点
虚函数的缺点
C++ 虚函数 MCQ1) 在 C++ 中,以下哪个类用于重新定义虚函数?
答案: c) 派生类 2) 在 C++ 后期/动态绑定中,函数调用在何时解析?
答案: b) 运行时 3) 以下程序的输出是什么?
答案: a) 这是一辆跑车 4) 在 C++ 中,以下哪个选项用于访问虚函数?
答案: c) 对象指针 5) C++ 中纯虚函数的正确语法是什么?
答案: b) virtual return_type func() = 0; 下一主题C++ 接口 |
在 C++ 中,函数重写是 OOP(面向对象编程)的一个概念,它允许派生类重新定义其基类中已提供的函数。它用于实现运行时多态性。当我们需要修改或...时,函数重写特别有用。
7 分钟阅读
在 C++ 中,函数重载是面向对象编程的一个特性,它允许多个函数拥有相同的名称,但具有不同的参数列表(无论是类型、数量还是两者兼而有之)。它通过允许函数...来使代码更具可读性、可重用性和效率。
7 分钟阅读
运算符重载是 C++ 中的重要特性之一。它是一种编译时多态性。它用于编辑某些运算符的默认行为,例如 C++ 中的“+”、“-”、“==”和“*”。它使我们能够使用“+”、“-”、“*”运算符...
阅读9分钟
在 C++ 中,“多态性”一词是“poly”+“morphs”这两个词的组合,意思是多种形式。它是一个希腊词。此属性创建相同的实体,例如在不同场景中表现不同的函数和运算符。使用多态性,我们...
阅读 8 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India