概述
-
类是成员变量和成员方法的载体。
-
一个类的功能应该尽可能的简单,不应该承担不符合它的职责。这在设计模式中为单一职责原则。(SPR:Single Responsibility Principle)
-
类作为载体,将其属性和方法封装在内部,不会直接将成员变量暴露在外部。通过protected和local关键词来设置成员变量和方法的外部权限。封装属性在设计模式中为开放封闭原则(OCP:Open Closed Principle)
*使用了local和protected修饰的成员变量和方法,从外部的句柄是没办法访问class clock里的成员变量。
![](https://i-blog.csdnimg.cn/blog_migrate/3eec2b48c60bb6c276d0d64f81313f0f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d8a653c06c538bf75a44941e0319c938.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1d5b1458109aaed775a5ba0b5156001f.png)
-
如果没有指明访问类型为local或protected等类型,那么则默认为public类型(public在SV中不为关键词,而protected和local为关键词),使用public修饰,子类和外部均可以访问类内部的成员变量。
![](https://i-blog.csdnimg.cn/blog_migrate/c02ab1516f234061b4b38f6fc557c407.png)
定义成员方法
![](https://i-blog.csdnimg.cn/blog_migrate/2d21be17d92a1014f7ffa65b8fd7ab9f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cdfc18ef2bf537331d6121d97913fee1.png)
类的封装
![](https://i-blog.csdnimg.cn/blog_migrate/92c71ce60ac6f997129f75c67aee9232.png)
-
类的内存空间需要构建对象才会开辟,struct则是在变量声明时就已经开辟了;
-
类可以声明变量和方法,struct只能声明变量;
![](https://i-blog.csdnimg.cn/blog_migrate/c7fba2f22e9d527f838dee5333e38e65.png)
-
从例化来看,模块module必须在仿真一开始就确定是否被例化。而类class的变量在仿真的任何时候都可以创建新的对象。即在硬件世界,硬件部分必须在仿真一开始就确定,即模块module中内部的过程块、变量都是静态的。
-
从封装性来说,模块module内部的方法和变量都是对外开放的。类则需要通过protected、local、public等修饰来确定外部访问的权限能否访问类内部的成员变量和方法。
-
模块module没有继承。类有继承。类可以通过继承完成功能的拓展。
![](https://i-blog.csdnimg.cn/blog_migrate/7217ec0e73f11baf37801fbdbb32f819.png)
答案:A。B选型则是在问静态句柄可不可以在编译的时候就生成对象,即在还没运行仿真,仿真一开始的时候就有一些静态的对象存在?可以。
类的迷思
![](https://i-blog.csdnimg.cn/blog_migrate/f489cb43bf4e01916f666d3431f74604.png)