ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Systemverilog-- OOP--对象的拷贝

2022-07-03 10:04:37  阅读:238  来源: 互联网

标签:父类 -- 句柄 OOP 子类 拷贝 copy data Systemverilog


目录

 

浅拷贝:

定义拷贝函数:

拷贝函数总结:


 

浅拷贝:

Packet p1;
Packet p2;
p1 = new;
p2 = new p1;

在创建p2对象时,将从p1拷贝其成员变量例如 interger,string和句柄等,这种拷贝方式称为浅拷贝(shallow copy)。

定义拷贝函数:

如果要拷贝对象,指的是首先创建一个新的对象(开辟新的空间),再将目标对象的成员变量拷贝给新对象的成员,使新对象与目标对象的成员变量数值保持一致,即完成了对象的拷贝(成员变量的拷贝)

例如如下的代码:

class basic_test;    //父类
    ...
    virtual function void copy_data(basic_test t);
        t.def = def;
        t.fin = fin;
    endfunction
    virtual function basic_test copy();
        basic_test t = new(0);
        copy_data(t);
        return t;
    endfunction
endclass


class test_wr extends basic_test; //子类
    ...
    function void copy_data(basic_test t); //子类与父类的形参要相同,故 t 是父类句柄
        test_wr h;  // h 是子类句柄
        super.copy_data(t); // 调用父类的copy_data()函数
        $cast(h,t);  //这把父类句柄转化为子类句柄,指向子类对象
        h.def = def;
    endfunction
    function basic_test copy();
        test_wr t = new();  // t是子类句柄,指向子类对象
        copy_data(t);  // copy_data里面的参数是父类句柄,这里有一个隐式转换,子类句柄转换为父类句柄,故 t 是父类句柄,指向子类对象
        return t;  // 这返回的还是父类句柄
    endfunction
endclass

copy_data函数: 只拷贝变量,把当前的变量def/fin, 传递给t所指的新对象的成员变量,

copy函数:创建一个对象,然后调用copy_data()对里面的成员变量做赋值,最后返回该对象的句柄 

拷贝函数总结:

1)将成员拷贝函数copy_data() 和新对象生成函数copy() 分为两个方法,这样使得子类继承和方法复用较为容易。

2)为了保证父类和子类的成员均可以完成拷贝,将拷贝方法声明为虚方法,且遵循只拷贝该类的域成员的原则,父类的成员拷贝应由父类的拷贝方法完成。

3)在实现copy_data() 过程中,应该注意句柄的类型转换,保证转换后的句柄可以访问类成员变量

标签:父类,--,句柄,OOP,子类,拷贝,copy,data,Systemverilog
来源: https://www.cnblogs.com/tianranjushi/p/16439272.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有