uvm ch20 深copy

uvm ch20 深copy


do_copy /convert2string这些函数在使用field_automation的时候不用自己写,否则需要自己实现;建议自己实现方便调试;

convert2string

在本类中只处理这个类新增加的数据成员,其他的调用super实现;

class mammal extends animal;
   int    babies_in_litter;
   function new(int a = 0, b = 0);
      super.new(a);
      babies_in_litter = b;
   endfunction : new
   function string convert2string();
      return {super.convert2string(), 
              $sformatf("\nbabies in litter: %0d",babies_in_litter)};
   endfunction : convert2string
   function void do_copy(animal copied_animal);
      mammal copied_mammal;
      super.do_copy(copied_animal);
      $cast(copied_mammal, copied_animal);
      babies_in_litter = copied_mammal.babies_in_litter;
   endfunction : do_copy
endclass : mammal

class lion extends mammal;
   bit is_female;
   function new(int age = 0, int babies_in_litter = 0, bit is_female = 0);
      super.new(age, babies_in_litter);
      this.is_female = is_female;
   endfunction : new
   function string convert2string();
      string gender_s;
      gender_s = (is_female) ? "Female" : "Male";
      return {super.convert2string(), "\nGender: ",gender_s};
   endfunction : convert2string
   function void do_copy(animal copied_animal);
      lion copied_lion;
      super.do_copy(copied_animal);
      $cast(copied_lion, copied_animal);
      this.is_female = copied_lion.is_female;
   endfunction : do_copy
endclass : lion
class captive_lion extends lion;
   string name;
   function new(int age=0, int babies_in_litter = 0,  bit is_female=0, string name="");
      super.new(age,babies_in_litter, is_female);
      this.name = name;
   endfunction : new
   function string convert2string();
      return { super.convert2string(),"\nName: ", name };
   endfunction : convert2string
   function void do_copy(animal copied_animal);  //终点 是animal 类型的
      captive_lion copied_captive_lion;
      super.do_copy(copied_animal);
      $cast(copied_captive_lion, copied_animal);
      this.name = copied_captive_lion.name;
   endfunction : do_copy
endclass : captive_lion

class circus_lion extends captive_lion;
   byte numb_tricks;
   function new(int age=0, bit is_female=0, int babies_in_litter = 0,
                string name="", byte numb_tricks=0);
      super.new(age,babies_in_litter, is_female, name);
      this.numb_tricks = numb_tricks;
   endfunction : new
   function string convert2string();
      return {super.convert2string(),"\n",
              $sformatf("numb_tricks: %0d",numb_tricks)};
   endfunction : convert2string
   function void do_copy(animal copied_animal);
      circus_lion copied_circus_lion;
      super.do_copy(copied_animal);
      $cast(copied_circus_lion, copied_animal);
      this.numb_tricks = copied_circus_lion.numb_tricks;
   endfunction : do_copy
endclass : circus_lion
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值