1.方法重载和重写的源码区别
2.注释和注解的区别
3.[UVM源代码研究] 如何定制一款个性化的打印格式
方法重载和重写的区别
Overload是重载的意思,表示在同一个类中,源码允许存在一个以上的源码同名函数,只要他们的源码参数个数或者参数类型不同即可,Override是源码覆盖的意思,也就是源码qt使用mqtt源码重写,它与返回值类型无关,源码只看参数列表,源码两者不同主要体现在:目的源码不同、范围不同、源码参数不同、源码多态性不同、源码返回类型不同。源码小程序图片源码1、源码目的源码不同
overload用于增加程序的可读性(做法不同,但是做的同一事情)。 override用于提供其超级类已经提供的方法的特定实现。
2、范围不同
overload 在相同的类范围内内执行。 override发生在两类具有继承(继承)的关系。
3、参数不同
overload参数必须不同。 override参数必须相同。
4、多态性不同
overload 静态多态,调用的函数在编译时被选中。 override 是php开源源码大全运行时多态性的。
5、返回类型不同
overload中可以相同或不同。但你必须改变参数。 override必须是相同的或协变的。
百度百科-overload
百度百科-override
注释和注解的区别
注释和注解的区别介绍如下:(1)注解:用于描述代码,说明程序,主要目的是为了给计算机看,且能够影响程序的运行。
(2)注释:用于描述代码的作用和一些关键性的知识点,使用文字描述程序,是为了给程序员观看,以此来使程序员能够以快的淘宝客分享佣金源码时间了解被注释的代码。
解释:
注解
叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举在同一个层次,它可以声明在包、类、字段、局部变量、方法参数等的前面,用来对这些元素进行说明、源码资本吕月梅注释。
注解的作用分类
编写文档:通过代码里表示的元数据生成文档生成doc文档。
代码分析:通过代码里表示的元数据进行分析使用反射。
编译检查:通过代码里表示的元数据让编译器能够实现基本的编译检查Override。
注解按照运行机制分类
源码注解:注解只在源码中存在,编译成.class文件之后就不存在了。
编译时注解:注解在源码存在的基础上,也会在.class文件中存在,但是在运行阶段中就不存在了,例如:@Override。
运行时注解:注解在运行阶段依然存在,且能够影响程序的运行过程,例如:@Autowired。
[UVM源代码研究] 如何定制一款个性化的打印格式
使用默认的打印格式时,执行如下代码:
实际打印结果格式如下:
查看UVM源代码,我们首先定位`uvm_info宏定义的位置:
这段代码对uvm_info/uvm_warning/uvm_error/uvm_fatal等宏进行了描述,实际上是对uvm_report_*函数的封装。以`uvm_info为例,分析其执行过程,其中使用了全局函数uvm_report_enabled。
这里又调用了uvm_root中定义的uvm_report_enabled函数。需要注意的是,在uvm_root中并未找到这个函数的定义。经过查找源代码,发现uvm_report_object中定义了uvm_report_enabled。
为什么要通过uvm_root实例调用这个函数呢?这需要了解uvm类库的继承关系。通过分析,我们发现通过调用uvm_root中uvm_report_enabled的函数,是因为uvm_root支持单例模式,可以获取uvm_root的单例句柄执行uvm_report_object中定义的自动继承的函数,避免了创建额外的实例。
接下来分析函数执行过程,原本简单的获取severity对应的verbosity阈值设置,却涉及了severity的override问题。我们可以通过调用函数或运行时传入参数来对severity进行override。
所有severity的override都记录在uvm_pool键值对severity_id_verbosities中。
severity和verbosity枚举类型定义如下:
回到uvm_report_object中行的代码,可以认为调用`uvm宏传入的verbosity值如果大于设置的verbosity阈值,则uvm_report_enabled返回0。另外行还有一种函数返回0的情况。
关于uvm_action和verbosity的设置类似,不再展开。执行`uvm_info系列宏时,不仅需要考虑severity对应的verbosity_level的设置是否大于阈值,还需要考虑对severity设置的行为是否为UVM_NO_ACTION来判断uvm_report_enabled的返回值。
本质上,执行的是uvm_report_server中的compose_message函数,该函数规定了uvm_info系列宏的打印格式。
这个函数的参数filename和line是我们调用uvm_report_info传入的`uvm_file和`uvm_line。
`__FILE__和`__LINE__是systemverilog的编译指令,在编译阶段被替换:`__FILE__被替换为当前文件的文件名,以字符串形式存在;`__LINE__被替换为当前文件的行号,以十进制数字形式存在。
如果需要定义个性化的打印格式,可以通过从uvm_report_server继承一个类重写compose_message函数实现。需要注意的是,这里不能用set_type_override_by_type/name,因为uvm_report_server类没有使用uvm_object_utils注册,也没有实现get_type()函数,所以不能用传统的factory的override方法进行override。好在uvm_report_server已经预留好了子类server的覆盖函数set_server。
这个静态函数可以直接使用类uvm_report_server进行调用。接下来,我们通过一个例子来看看如何实现个性化打印的定制。
首先,我们定制自己的report_server:
然后,在base_test中实例化并set_server:
现在,我们来看看最初那句打印的执行情况:
通过以上步骤,我们便实现了个性化的打印定制,该定制对4种severity同时生效。
2024-12-23 06:342021人浏览
2024-12-23 06:28408人浏览
2024-12-23 06:091801人浏览
2024-12-23 05:00606人浏览
2024-12-23 04:482904人浏览
2024-12-23 04:48484人浏览
台北市議會最資深「十連霸」議員陳政忠,被控涉犯宏福建設炒股案、掏空案,案件纏訟23年後,全案在7月判刑6年定讞,今6)天上午他頭戴白色鴨舌帽,一身輕便赴北檢發監執行。陳政忠辦好手續後,和親友擁抱告別,
花蓮強震已釀13人罹難,目前還有6人失聯,其中有5人疑似受困砂卡礑步道,包括持澳洲護照入境的新加坡籍夫妻,隨著最新畫面曝光,現在也確定他們在強震當天7點多進入砂卡礑步道。除了土耳其無人機專家,大型機具
牽涉台灣國際經貿賽局的TPP,已經喊了兩年,眾多官員、民間團體、學者、企業也不斷釋出台灣一定要加入TPP的支持聲浪。但為什麼遲遲沒有進展,到底是卡在哪裡?