1. 虚函数与纯虚函数
- 虚函数:在类成员方法的声明(不是定义)语句前加virtual关键字,此函数就变成了虚函数。具体如下:
virtual void function set_value();...
endfunction
用途:主要用于实现多态。在父类中定义函数为虚函数,在子类中进行重写(override)该函数。当声明一个父类类指针,指向的对象为子类对象时,通过父类指针调用该虚函数时,会根据指针实际指向的对象类型选择调用子类的函数而不是父类中的函数(多态)。另外对于虚函数,子类如果不提供虚函数的实现,将会自动调用基类的缺省虚函数实现作为备选方案。
- 纯虚函数:定义函数时添加"pure virtual"关键字,或者在虚函数后面加"=0"(C/C++),虚函数就变成了纯虚函数。纯虚函数在基类中仅给出函数声明(声明),不对虚函数实现定义(没有函数体),而是在其派生类中实现。具体如下:
//SV
pure virtual void function set_value();...
endfunction//C&C++
virtual void funtion set_value()=0;
用途:用于实现函数的多态。用在抽象类中,提供一个函数的原型(基类模板),由继承的子类实现。这相当于声明了一个函数框架,表明该抽象类必须实现哪些功能(特性),具体实现由子类中函数实现(不同子类实现方式可以不同,函数多态)。
另外:
- 凡是包含纯虚函数的类是抽象类,抽象类只能作为派生类的基类,不能实例化成对象,但是可以做指针和引用(派生类实现该纯虚函数后,定义抽象类的指针,并指向或引用子类对象)。
- 派生自抽象类的子类如果不提供纯虚函数的实现,编译将会失败(继承自抽象类的子类必须实现抽象类中的全部纯虚函数)。
- 纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。如果在基类中没有保留函数的名字,则无法实现多态性。
- 抽象类的唯一用途是为派生类提供基类,纯虚函数的作用是作为派生类中的成员函数的基础,并实现动态多态性。继承于抽象类的派生类如果不能实现基类中的所有纯虚函数,那么这个派生类也就成了抽象类。因为它继承了基类的抽象函数,只要含有纯虚函数的类就是抽象类。
- 多态性使得程序调用的函数是在运行时动态确定的,而不是在编译时静态确定的。
- 在定义类时添加"virtual"关键字,该类就是抽象类。
virtual class base_env;...
endclass
- 纯虚函数是一个原型,不是一个空的虚方法。
- 纯虚方法只能定义在虚类中,但是虚类中也可以定义非纯虚方法。
参考文档:
37331092
115384176