iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >一文带你学习C++中的虚函数
  • 309
分享到

一文带你学习C++中的虚函数

C++虚函数C++函数 2023-05-19 15:05:12 309人浏览 薄情痞子
摘要

目录概念语法使用总结概念 虚函数是一种具有特殊属性的成员函数,它可以被子类重写,并在运行时确定调用哪个方法。为了定义一个虚函数,将在该函数的声明中使用关键字virtual。当调用一个

概念

虚函数是一种具有特殊属性的成员函数,它可以被子类重写,并在运行时确定调用哪个方法。为了定义一个虚函数,将在该函数的声明中使用关键字virtual。当调用一个虚函数时,编译器不会立即解析函数的调用,而是使用一个虚函数表(VTable)来查找到实际方法的地址。

语法


//在基类声明中定义虚函数: class Base { public: virtual void DoSomething(); };

//在子类声明中覆盖虚函数: class Derived : public Base { public: void DoSomething() override; };

在基类中定义一个虚函数时,必须在函数声明中使用 virtual 关键字。如果您想其在子类中被继承,则需要在访问说明符后使用该关键字。在子类中覆盖虚函数时,需要使用 override 关键字,以帮助编译器查找组合关系中的错误。

使用

虚函数在继承关系中非常有用。例如,如果您有一个 Base 类,其中包含一个名为 DoSomething 的虚函数,您希望在 Derived 类中更改 DoSomething 方法的实现,则可以将其覆盖为 Derived 的特定实现。当您调用实际的 DoSomething 方法时,虚函数表将用于查找 Derived 方法的地址,而不是 Base 方法。

示例1:调用虚函数

下面是一个简单的示例,展示如何从基类和派生类中调用虚函数。请注意,在这里代码中,pBase 指向 Derived 类的实例,但是调用的是 Derived 的虚函数,而不是 Base 的实际函数。

#include

class Base { public: virtual void DoSomething() { std::cout << "Base DoSomething() called" << std::endl; } };

class Derived : public Base { public: void DoSomething() override { std::cout << "Derived DoSomething() called" << std::endl; } };

int main() { Derived derived; Base* pBase = &derived;

pBase->DoSomething(); // 调用 Derived::DoSomething() }

输出:

Derived DoSomething() called

示例2:使用虚函数进行动态绑定

下面是一个更高级的示例,演示如何使用虚函数进行动态绑定。假设有一个 Shape 的基类,包含一个名为 Draw 的虚方法,并且有两个派生类: Circle 和 Square。如下图所示:

我们可以定义一个名为 draw_all 的方法,该方法将为每个形状调用 Draw 方法。在这种情况下,我们将使用循环遍历形状的列表,并根据基类指针调用 Draw 方法。但是,由于 Draw 是虚的,所以它将总是委托给子类调用。


#include #include

class Shape { public: virtual void Draw() { std::cout << "Base shape drawing" << std::endl; } };

class Circle : public Shape { public: void Draw() override { std::cout << "Circle drawing" << std::endl; } };

class Square : public Shape { public: void Draw() override { std::cout << "Square drawing" << std::endl; } };

void draw_all(const std::vector<Shape*>& shapes) { for (const auto& shape : shapes) { shape->Draw(); } }

int main() { std::vector<Shape*> shapes = {new Circle(), new Square(), new Circle(), new Square()}; draw_all(shapes); }

输出:

Circle drawing Square drawing Circle drawing Square drawing

总结

这篇文章介绍了c++虚函数的基本概念、语法、使用及其示例。虚函数是面向对象编程中非常重要的概念,常用于继承关系中,允许子类重写基类方法,以实现更多的灵活性和可复用性。通过使用虚函数表,C++可以确保在必要的时候调用正确的方法,从而提高程序的整体性能。

到此这篇关于一文详解C++虚函数的文章就介绍到这了,更多相关C++ 虚函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文带你学习C++中的虚函数

本文链接: https://www.lsjlt.com/news/213382.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作