使用类的好处:
1,代码复用
2,代码易于维护
3,内存管理
class rectangle;
int length;
int width;
function new(int l, int w);
length = l;
width = w;
endfunction
function int area();
return length * width;
endfunction
endclass
上述代码定义了一个名为rectangle的类,包含了两个变量(属性:property)和两个method,class把变量和处理变量的函数或任务封装在一起。当一个结构体(struct)被声明(declared)时,仿真器立马为结构体分配内存空间(allocate memory),但是当一个类被申明是并不是这样,只有当类里面的new()函数(构造器)被调用时,才能为一个对象(object)分配内存空间。
module top_class;
rectangle rectangle_h;
initial begin
rectangle_h = new(.l(50), .w(20));
$display ("rectangle area: %0d", rectangle_h.area());
end
endmodule
在这个module中,首先声明了一个句柄(handle),一个句柄相当于一个内存指针,但不能对其进行运算,这个申明使得编译器留足空间存储句柄,但并没有存储对象。当对句柄进行实例化,即调用new()函数时,才为对象分配了内存空间。一个类能实例化的对象之受限于内存的大小。
当对一个相同的句柄再一次调用new()时,编译器将会为新建的对象分配内存,从而释放不在被引用的对象所占用的内存。
类的扩展:
class square extends rectangle;
function new(int side);
super.new(.l(side), .w(side));
endfunction
endclass
上述的类square从rectangle类扩展而来,square是rectangle的子类。关键字extends使得在默认情况下,square类可以使用父类rectangle的所有数据成员(属性)和方法。关键字super明确的告诉编译器我们想要引用在父类中的构造器,并将side传递给它。从而实现了代码复用的功能(前提是square和rectangle有着相似的属性)。