当前位置: 首页 > news >正文

中山哪里有做微网站的吴中区建设局网站

中山哪里有做微网站的,吴中区建设局网站,wordpress 版本,shopify官网在 C 中#xff0c;调用基类的纯虚函数实际上是通过运行时多态性来决定调用哪一个派生类的实现。这种机制是通过虚函数表#xff08;vtable#xff09;和虚函数指针#xff08;vptr#xff09;实现的。下面我们来详细探讨一下这个过程。 虚函数表和虚函数指针 虚函数表 中调用基类的纯虚函数实际上是通过运行时多态性来决定调用哪一个派生类的实现。这种机制是通过虚函数表vtable和虚函数指针vptr实现的。下面我们来详细探讨一下这个过程。 虚函数表和虚函数指针 虚函数表vtable: 每个包含虚函数的类包括纯虚函数都会有一个虚函数表。虚函数表是一个指针数组每个指针指向类的虚函数的具体实现。虚函数表是编译器在编译时生成的并且对于同一个类的所有对象是共享的。 虚函数指针vptr: 每个对象有一个指向其类的虚函数表的指针称为虚函数指针vptr。当一个对象被创建时其 vptr 被初始化为指向该对象所属类的虚函数表。 当调用一个虚函数时程序会通过对象的 vptr 找到相应的 vtable并在 vtable 中找到该函数的地址然后进行调用。这种机制允许程序在运行时根据对象的实际类型调用适当的函数实现这就是多态性。 调用纯虚函数的过程 假设你有一个基类 Base 和几个派生类 Derived1 和 Derived2基类 Base 定义了一个纯虚函数 doSomething。以下是如何知道调用哪个派生类实现的步骤 对于 obj2-doSomething()类似的过程会发生但它的 vptr 指向 Derived2 的 vtable最终调用 Derived2 中 doSomething 的实现。 运行时确定派生类的实现 这是因为 C 的多态性允许基类指针或引用指向派生类对象。调用虚函数时实际调用的函数实现是通过对象的动态类型即它真正的派生类类型来确定的。这种类型是在运行时决定的而不是编译时。 代码示例 下面是一个完整的代码示例展示了上述过程 定义类和函数: class Base { public:virtual void doSomething() 0; // 纯虚函数 };class Derived1 : public Base { public:void doSomething() override {std::cout Derived1 implementation std::endl;} };class Derived2 : public Base { public:void doSomething() override {std::cout Derived2 implementation std::endl;} };实例化派生类对象: Base* obj1 new Derived1(); Base* obj2 new Derived2();调用虚函数: obj1-doSomething(); // 调用 Derived1 的实现 obj2-doSomething(); // 调用 Derived2 的实现决定调用哪个派生类实现的过程 当你调用 obj1-doSomething() 时以下过程发生 查找 vptr: obj1 是指向 Derived1 对象的基类指针。程序通过 obj1 找到它的 vptr该 vptr 指向 Derived1 的 vtable。 查找 vtable: 程序查找 Derived1 的 vtable这个表包含 doSomething 的地址。 调用函数: 程序通过 vtable 获取 doSomething 的地址然后调用这个地址处的函数即 Derived1 中 doSomething 的实现。 对于 obj2-doSomething()类似的过程会发生但它的 vptr 指向 Derived2 的 vtable最终调用 Derived2 中 doSomething 的实现。 运行时确定派生类的实现 这是因为 C 的多态性允许基类指针或引用指向派生类对象。调用虚函数时实际调用的函数实现是通过对象的动态类型即它真正的派生类类型来确定的。这种类型是在运行时决定的而不是编译时。 代码示例 下面是一个完整的代码示例展示了上述过程 #include iostreamclass Base { public:virtual void doSomething() 0; // 纯虚函数 };class Derived1 : public Base { public:void doSomething() override {std::cout Derived1 implementation std::endl;} };class Derived2 : public Base { public:void doSomething() override {std::cout Derived2 implementation std::endl;} };int main() {Base* obj1 new Derived1();Base* obj2 new Derived2();obj1-doSomething(); // 输出: Derived1 implementationobj2-doSomething(); // 输出: Derived2 implementationdelete obj1;delete obj2;return 0; }在这个示例中通过基类指针调用 doSomething 时程序根据实际的派生类类型调用相应的实现这展示了 C 中的运行时多态性。 通过调试查看 如果你使用调试器如 gdb你可以在调用虚函数前设置断点并逐步查看调用过程。你会看到程序通过 vptr 查找 vtable然后调用适当的函数实现。这是验证多态行为的一个好方法。 总结 vptr 和 vtable: vptr 指向对象的 vtable通过它们在运行时决定调用哪个派生类的实现。多态性: 基类指针或引用调用虚函数时实际调用的是派生类的实现这通过动态绑定实现。调试和分析: 使用调试器可以更深入地观察这种运行时行为。
http://www.hkea.cn/news/14428673/

相关文章:

  • 自助免费网站建设平台网站开通
  • 沙井做网站网站建设公司走进深圳易百讯
  • 网站建设的难点和问题做U启的网站
  • 西安网站建设开发公司怎么创建视频网站
  • 网站备案查询中心卢松松的网站
  • 网站 错误代码遵义网站设计
  • 舞钢做网站上海模板建站哪家好
  • 建设企业银行官方网站网站后台制作视频教程
  • 个人网站数据库大小青海做网站哪家好
  • 免费做网站软件视频网站推广该怎么做
  • 企业网站做百度排名要怎么做重庆网站建设公司咨询亿企帮
  • 2017年网站建设高职考f卷新乡网站建设官网
  • 用蜗牛做logo的网站免费做简历下载的网站
  • 苏州网站seo精品课程 网站建设质量
  • 湖南网站建设大全网站推广平台代理
  • 精品电商网站建设网站的百度词条怎么做
  • 上海网站建设的网上购物系统论文
  • 扒人家网站做网站在线图片转链接生成器
  • 建站平台社区做照片有那些网站
  • 建站公司塔山双喜四种营销模式
  • 蕲春县住房和城乡建设局网站php做网页
  • 注销网站 注销主体高端公司网站
  • 网站建设专业英文如何做网站出单
  • 网站前台可以打开定制小程序多少钱
  • 可以网站可以做免费的文案广告语管理咨询的作用
  • 网站建设的财务计划企业年金查询个人账户查询
  • 专业3合1网站建设价格wordpress 中文 模板
  • 网站 永久关停 请示小工厂如何找外贸公司合作
  • 建站用哪个模板好行业网站盈利模式
  • 网络公司网站策划书佛山做推广网站的