| ||
5.1概述
5.2考虑名词,而非动词
5.3编写第一个类
类封装了数据和操作这些数据的子程序
5.4在哪里定义类
SV中可将类定义在program、module、package中,或者在这些块之外的任何地方。本书只给出类在程序块中使用的情况。
5.5 OOP术语
类(class)、对象(object)、句柄(handle)、属性(property)、方法(method)、原型(prototype)
5.6创建新对象
Verilog的实例名只能指向一个实例,而SV句柄可指向很多对象(一次只能指向一个)。
对象的声明和分配空间。
定制构造函数(new函数):构造函数除了分配内存外,还初始化变量。还可以在对象中定义new函数来讲初始化的默认值设为想要的数值。
避免在声明一个句柄时调用new函数。
new()和new[]的区别。
为对象创建一个句柄:对象与句柄的区别,需要动态创建对象的原因。
5.7对象的解除分配 (句柄=null)
SV的句柄只能指向一种类型
5.8使用对象
对对象使用“.”来引用变量和子程序。
5.9静态变量和全局变量
可以在类中创建一个静态变量(static声明),被这个类的所有实例共享,使用范围仅限于这个类。
通过类名访问静态变量:(类名::静态变量名)(“::”即为类作用操作符)。静态变量在声明时初始化,不能在构造函数中初始化。
5.10类的方法
类中的程序也称作方法(task或function)
5.11在类之外定义方法(extern 和 作用域操作符)
5.12作用域规则
SV中可以在begin end中声明变量。 变量的名字可以相对于当前作用域,也可以用绝对作用域标示,例如以$root开始。
this:指向类一级的变量?
5.13在一个类中使用另一个类
在一个类中使用另一个类时,最好在上层类的构造函数中完成类的实例化。
编译顺序的问题:使用typedef语句声明一个类名。 ???软件顺序执行,识别不到?
5.14*理解动态对象(研究书中的例子更好)
将对象传递给方法
在任务中修改句柄
在程序中修改对象
5.15*对象的复制
使用new操作符可以复制一个对象。若类中包含一个指向另一个类的句柄,此时只有最高一级的对象被new操作符复制。
编写自己的简单复制函数
编写自己的深层复制函数
使用流操作符从数组到打包对象,或者从打包对象到数组。
5.16公有和私有
OOP的核心概念是把数据和相关的方法封装成一个类。类中的数据默认被定义为私有的。