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