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

视频教学互动网站建设上海自建站招聘

视频教学互动网站建设,上海自建站招聘,sem是什么?,天津网址当一个类对象指针调用虚函数时#xff0c;这就涉及到 运行时多态 的概念。这意味着实际调用的函数取决于对象的实际类型#xff0c;而不仅仅是指针的静态类型。 假设我们有以下的类层次结构#xff1a; class Base { public:virtual void print() {std::cout 这就涉及到 运行时多态 的概念。这意味着实际调用的函数取决于对象的实际类型而不仅仅是指针的静态类型。 假设我们有以下的类层次结构 class Base { public:virtual void print() {std::cout Base class std::endl;} };class Derived : public Base { public:void print() override {std::cout Derived class std::endl;} };创建对象 首先我们创建一个对象。可以是基类类型的对象也可以是派生类类型的对象。例如 Base baseObj; Derived derivedObj;创建指针 然后我们可以创建指向这些对象的指针使用基类指针来指向派生类对象。例如 Copy code Base* ptrToBase baseObj; Base* ptrToDerived derivedObj;虚函数表对于包含虚函数的类每个对象的内存中通常会包含一个 指向虚函数表的指针。虚函数表是一个包含虚函数指针的数组其中的每个指针指向对应虚函数的实际代码地址。 以下是一个示例 int main() {Base baseObj;Derived derivedObj;Base* ptrToBase baseObj;Base* ptrToDerived derivedObj;ptrToBase-print(); // 输出 Base classptrToDerived-print(); // 输出 Derived classreturn 0; }在这个示例中当通过基类指针调用虚函数时实际上调用的是对象的实际类型所对应的虚函数。这就是运行时多态性的表现。 虚函数表是针对每个类生成的每个类都有一个并且每个类的对象实例都会有一个指向其对应类的虚函数表的指针。虚函数表本身是一个指针数组其中存储着该类的所有虚函数的指针。每个虚函数指针指向实际的虚函数代码。虚函数表是个数组元素数量等于该类中声明的虚函数的数量。 在上面这个示例中 对于 Base 类它只有一个虚函数 print因此其虚函数表只有一个指针指向 Base::print 函数。对于 Derived 类它重写了 print 函数因此其虚函数表也只有一个指针指向 Derived::print 函数。 当使用对象指针或引用调用虚函数时整个过程可以分为编译期和运行期两个阶段。以下是详细的虚函数调用过程 编译期Compile Time 编译器识别调用 编译器在编译期根据对象指针或引用的静态类型即声明时的类型来识别将要调用的虚函数。查找虚函数表 编译器通过对象指针的静态类型找到相应类的虚函数表然后根据虚函数的位置通常是函数在虚函数表中的索引确定要调用的虚函数的地址。生成调用指令 编译器生成机器代码将虚函数调用指令指向静态确定的虚函数地址。这个地址是根据对象指针的静态类型在编译期计算出来的。 运行期Run Time 实际对象确定 在程序运行时通过对象指针或引用调用虚函数。这时程序运行期间实际的对象类型才会被确定。查找虚函数表vptr 当调用虚函数时程序使用对象指针中存储的虚函数指针vptr来查找虚函数表的地址。动态修正地址 从虚函数表中根据编译期确定的虚函数位置找到实际要调用的虚函数的地址。这个过程是在运行期根据实际对象类型进行的。调用虚函数 最终调用虚函数的指令将指向运行期确定的虚函数地址从而调用正确的虚函数。 大家可能跟我有相同异或既然编译器可以知道这一行是调用的虚函数那就应该知道编译期间不太能确定实际上的函数调用地址为什么还要去解析一遍函数地址动态运行期再去修正这个地址 静态绑定和虚函数表的优化 虽然编译器在编译期可以知道函数是否是虚函数但它也要考虑静态绑定的情况。如果编译器在编译期确定某个函数是虚函数但在特定的调用点它知道调用的函数就是该类中的那个实现编译器可以进行静态绑定优化避免虚函数表的查找。比如Base* ptr new Base(); ptr-print()虽然调用虚函数但是很明显编译期间就能确定正确的地址从而可以进行优化省略动态绑定过程 编译器优化和内联 编译器在编译期根据静态类型就能够确定调用的函数这样它可以进行更多的优化。如果函数是非虚的编译器可以尝试内联函数调用减少函数调用的开销。 错误检查和类型安全 静态类型在编译期可以帮助编译器检查代码中的错误。如果某个类没有实现特定的虚函数编译器可以在编译期就发现这个错误而不是等到运行时。 虚函数的重载解析 在 C 中虚函数可以被重载。编译器在编译期需要知道调用哪个函数的版本以便正确生成调用代码。 尽管在编译期可以确定虚函数的一些信息但在运行时由于多态性的需要最终的调用地址还是要根据实际对象的类型进行动态确定以实现正确的多态行为。编译期的信息对于优化、错误检查和静态绑定等方面仍然有重要作用。 最后。还可以看一下这个文章有图解的
http://www.hkea.cn/news/14488320/

相关文章:

  • 如何免费建个人网站网站商城运营模式
  • 外贸网站搭建难不难自动打开多个同网站网页
  • 手机网站html代码工程承包网站哪个好?
  • 网站建设费大概多少钱在线做抽奖网站
  • 不懂外贸做外贸网站好做吗做导航网站把别人的网址链接过来要经过允许吗
  • 网站制作自学百度云如何开一家公司流程
  • 天津市北辰区建设与管理局网站WordPress动态背景图
  • 营销型网站建设 合肥微官网是小程序吗
  • 南京建设网站公司店铺设计叫什么
  • 动易网站 青春营销型网站的设计框架
  • 珠海专业网站制作平台网站建设自学 优帮云
  • 网站忘记密码功能国内网站建设网站排名
  • 做爰全过程网站免费的视频那里有做网站的
  • 东莞市研发网站建设品牌网站专题模板
  • 网站建设公司赚钱网站制作加教程视频教程
  • 营销型网站外包宣传册设计与制作价格
  • 有域名之后怎么做网站杭州网络科技设计中心
  • wordpress数据库修改密码企业网站优化内容
  • 展览会网站建设买了万网的域名跟定制网站还要买空间吗
  • 做石油系统的公司网站网站项目申报书建设规模
  • 个人网站做淘宝客会怎样绿植租摆网站建设
  • thinkphp做的商城网站分销平台网站建设翻译
  • 教育类网站前置审批系统 用户登录成全视频观看免费高清第6季
  • 能联系做仿瓷的网站优化网站建设seo
  • 相亲网站界面设计重庆新闻频道回放观看
  • 网站内链建设wordpress游戏网站主题
  • 网站流量不够怎么办网站开发维护合同书
  • 外贸公司网站制作公司八亿免费建站
  • 南京外贸网站建设报价网站后台维护主要做什么
  • 网站访问量js谷歌网站 百度