动态联编和静态联编

本文详细介绍了静态联编和动态联编的概念。静态联编在编译时确定,由可访问性和默认值决定。动态联编则在运行时确定函数调用,需要成员函数为虚函数,常通过对象指针或引用调用。示例代码展示了动态联编如何在运行时查找虚表并调用正确函数,强调了动态联编的特性。
摘要由CSDN通过智能技术生成

动态联编和静态联编
一、静态联编

  1. 定义
    在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。
  2. 注意:
    静态联编由可访问属性和默认值确定

二、动态联编

  1. 定义
    编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。动态联编又称动态关联。
  2. 组成
    (1)成员函数必须声明为virtual
    (2)如果基类中声明了为虚函数,则派生类中不必再声明。
  3. 调用方式
    通过对象的指针或引用调用成员函数;或通过成员函数调用,反之就无法实现动态联编。
    如下代码: 在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
    原因:
    首先,创建base对象时,先创建base中的隐藏父对象Object,op指针是Object类型的指针,op->fun()时,静态联编,确定可访问属性(public),编译可以通过,默认值为10,在我们运行程序调动的时候,是动态联编,通过查询base中的虚表指针(指向base的虚表),动态调用base中的fun函数,但默认值为10,不是20.所以把10给了a。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值