SV4 面向对象编程基础

面向对象编程基础

1 编写第一个类

SV4 面向对象编程基础

2 在哪里定义类

  • 在SystemVerilog中,可以在program、module、package中,或者在之外的任何地方定义类。

3 创建新对象

  • SystemVerilog类在使用前必须先例化
  • SystemVerilog类在运行中测试平台需要的时候才会被创建
    SV4 面向对象编程基础
    SV4 面向对象编程基础

4 定制构造函数new

  • SystemVerilog会自动创建默认的new函数来给对象分配空间并初始化
  • new函数不能有返回值,new函数总是返回指向对象的句柄
    SV4 面向对象编程基础
    SV4 面向对象编程基础
    SV4 面向对象编程基础
    注:应避免在声明对象句柄的同时调用new函数!
    注:SystemVerilog中的一个句柄可以指向很多对象,当同一时刻只能指向一个。

5 对象的解除分配

  • 当最后一个句柄不再引用某个对象时,SystemVerilog就会释放该对象的内存空间。
  • SystemVerilog不允许对对象句柄进行加减等操作,也不允许将一种类型的句柄指向其他类型的对象。

6 使用对象

SV4 面向对象编程基础

7 静态变量和全局变量

7.1 简单的静态变量

  • 在SystemVerilog中,可以在类里定义静态变量,该变量可以被该类所有的实例所共享,且使用范围仅限于该类
    SV4 面向对象编程基础
    SV4 面向对象编程基础

7.2 访问静态变量

SV4 面向对象编程基础

7.3 静态变量的初始化

SV4 面向对象编程基础

7.4 静态方法

  • SystemVerilog不允许静态方法访问非静态变量
    SV4 面向对象编程基础
    SV4 面向对象编程基础

8 类的方法

  • 在类中定义的任务和函数
  • 类中的方法默认为动态的

8.1 在类的外面定义方法

  • 可以在类的内部声明方法原型,在类外定义方法内容
    SV4 面向对象编程基础

8.2 作用域规则

  • 在块中声明的变量为局部变量,其作用域为该块,不会影响其他块中的同名变量
  • 类应尽量在program和module外的package内定义

8.3 this

  • this可以用于在类的底层作用域访问类一级的变量
    SV4 面向对象编程基础

9 在一个类中使用另一个类

  • 通过使用指向对象的句柄,一个类内部可以包含另一个类的实例
    SV4 面向对象编程基础
    SV4 面向对象编程基础

10 将对象传递给方法

  • 可以将对象的句柄传递给方法
  • 方法中可以利用传递进来的对象句柄访问对象的变量和方法
  • 在未加ref修饰时,方法对传递进来的句柄进行了复制而不是引用,因此对传递进来的句柄进行修改后不会影响方法外的对象
    SV4 面向对象编程基础

11 句柄数组

SV4 面向对象编程基础

12 对象的复制

12.1 使用new复制

SV4 面向对象编程基础

12.2 编写简单的copy函数

  • 当要复制一个简单的类,类中不包含对其他类的引用,可以定义简单的复制函数
    SV4 面向对象编程基础
    SV4 面向对象编程基础

12.3 编写深层复制函数

SV4 面向对象编程基础
SV4 面向对象编程基础

13 公有和私有

  • 在SystemVerilog中,所有成员默认都是公有的,除非标记为local或者protected
上一篇:oracle创建普通用户(normal)授权


下一篇:POJ 1564(HDU 1258 ZOJ 1711) Sum It Up(DFS)