Class

使用类的好处:
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有着相似的属性)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值