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

广州建设网站哪家好支付招聘网站怎么做费用

广州建设网站哪家好,支付招聘网站怎么做费用,环江建设网站,wordpress国内案例C中通过虚函数实现多态的原理 我们都知道C是通过虚函数实现多态的,那么其中的原理是什么呢? 在C中,多态性是一种重要的特性,它允许通过基类指针或引用来调用派生类中的函数。多态性主要分为两种:编译时多态&#xff…

C++中通过虚函数实现多态的原理

我们都知道C++是通过虚函数实现多态的,那么其中的原理是什么呢?

在C++中,多态性是一种重要的特性,它允许通过基类指针或引用来调用派生类中的函数。多态性主要分为两种:编译时多态(主要通过函数重载和模板实现)和运行时多态(主要通过虚函数实现)。C++中通过虚函数实现的多态主要是运行时多态(动态多态),其原理主要基于虚函数表(vtable)和虚函数指针(vptr)。

1. 虚函数的定义

虚函数是在基类中使用virtual关键字声明的成员函数。例如:

class Base 
{
public:virtual void show() {cout << "Base::show" << endl;}
};

当一个类的成员函数被声明为虚函数后,C++运行时系统会为该类及其派生类提供动态绑定的机制。

2. 虚函数表(vtable)

虚函数表是一个由编译器生成的数组,其中存储了类中所有虚函数的地址。每个包含虚函数的类都有一个唯一的虚函数表。例如:

class Base 
{
public:virtual void show() {cout << "Base::show" << endl;}virtual void display() {cout << "Base::display" << endl;}
};

对于Base类,编译器会为其生成一个虚函数表,其中包含showdisplay的地址。

3. 虚函数指针(vptr)

每个包含虚函数的类的对象都会有一个隐藏的成员变量——虚函数指针(vptr)。这个指针指向该对象所属类的虚函数表。当对象被创建时,构造函数会初始化这个指针,使其指向正确的虚函数表。

4. 多态的实现原理

当通过基类指针或引用调用虚函数时,C++运行时系统会通过对象的vptr找到对应的vtable,然后通过vtable找到正确的虚函数地址并调用。这个过程称为动态绑定或晚期绑定。

#include <iostream>
using namespace std;class Base {
public:virtual void show() {cout << "Base::show" << endl;}
};class Derived : public Base {
public:void show() override {cout << "Derived::show" << endl;}
};int main() {Base* ptr;Base base;Derived derived;ptr = &base;ptr->show();  // 输出:Base::showptr = &derived;ptr->show();  // 输出:Derived::showreturn 0;
}

解释:

  1. Base base对象:
    • base对象的vptr指向Base类的vtable。
    • Base类的vtable中存储了Base::show的地址。
    • 当调用ptr->show()时,运行时通过ptr对象的vptr找到Base类的vtable,并调用Base::show
  2. Derived derived对象:
    • derived对象的vptr指向Derived类的vtable。
    • Derived类的vtable中存储了Derived::show的地址(覆盖了Base::show)。
    • 当调用ptr->show()时,运行时通过ptr对象的vptr找到Derived类的vtable,并调用Derived::show

5. 虚函数表的存储结构

假设Base类和Derived类的虚函数表存储如下:

  • Base类的vtable:
    • Base::show
    • Base::display(如果有其他虚函数)
  • Derived类的vtable:
    • Derived::show(覆盖了Base::show
    • Base::display(如果没有覆盖,仍然指向基类的虚函数)

6. 多态的条件

要实现通过虚函数的多态,必须满足以下条件:

  1. 继承关系: 派生类继承自基类。
  2. 虚函数: 基类中必须有虚函数。
  3. 覆盖: 派生类覆盖了基类的虚函数。
  4. 使用基类指针或引用: 通过基类指针或引用调用虚函数。

7. 总结

通过虚函数实现多态的核心是虚函数表(vtable)和虚函数指针(vptr)。vtable存储了类中虚函数的地址,vptr指向对象所属类的vtable。运行时通过vptr找到正确的vtable,再通过vtable找到正确的虚函数地址并调用,从而实现动态绑定。

这种机制使得程序能够在运行时根据对象的实际类型调用对应的虚函数,而不是根据指针或引用的类型,从而实现了多态。

http://www.dtcms.com/a/454093.html

相关文章:

  • 免费扑克网站代码商城网站建设一般需要多少钱
  • kanass入门到实战(10) - 如何做好测试管理?
  • 网站制作呼和浩特12315可以查询营业执照吗
  • 全球主要城市时间对比,实时更新|昼夜区分|时间对比
  • 栈:“后进先出” 的艺术,撑起程序世界的底层骨架
  • JAVA算法练习题day32
  • 网站添加设置着陆页唐山网站优化
  • 做婚纱网站的目的seo的主要工作是什么
  • 上海哪家做网站校园无线网络设计方案
  • 深入解析Doris ZoneMap索引机制
  • (1)SwiftUI基础入门教程
  • wordpress整站搬家教程河池做网站
  • 怎么改版一个网站白酒网站设计
  • windows显示驱动开发-节能与 VSync 控制
  • 安徽省住房和城乡建设厅官方网站网站访问量大
  • 好的平面设计网站有哪些易云巢做营销型网站
  • 从0死磕全栈之Next.js 中的错误处理机制详解(App Router)
  • c语言贪吃蛇游戏开发
  • 360网站seo优化怎么做简单网站
  • 小说网站静态模板设计师设计费一般多少
  • 网站主机要怎么做跨境电商交3980元培训费可信吗
  • Coze源码分析-资源库-编辑知识库-后端源码-流程/技术/总结
  • 哺乳动物双等位基因表达的 “守护者”--解析 MSL2对基因剂量平衡与疾病机制的新启示--文献精读164
  • 阿里云网站建设需要多少钱开发软件公司都有哪些
  • CTFHub SQL注入通关笔记4:布尔盲注(手注法+脚本法)
  • 虎书Fundamentals Of Computer Graphics翻译及笔记(1)——前言
  • 建网站公司室内设计效果图网站推荐
  • 网站建设收徒弟设计韩国电影完整版下载
  • 应聘网站优化的简历怎么做全新升级网站
  • 我的第一个网站