虚函数和纯虚函数的区别
5 分钟阅读
•
773 字
+
482 词
参考答案
- 虚函数
-
虚函数是在普通函数之前加一个
virtual关键字 - 虚函数是在基类中声明的,并且可以在派生类中被重写 。
- 虚函数可以有实现,也就是说,基类中的虚函数可以有一个定义,派生类可以选择提供自己的实现,也可以使用基类的实现。
- 通过虚函数,可以在基类指针或引用中实现动态绑定,即在运行时确定调用哪个类中的函数实现。
- 纯虚函数
-
纯虚函数是在虚函数后面加一个
=0 - 纯虚函数也是在基类中声明的,但它没有实现,只有声明 。
- 当一个类包含至少一个纯虚函数时,它就成为了一个抽象类,这意味着你不能实例化这样的类,但可以声明这种类型的指针或引用。
- 区别
-
是否实现:
- 虚函数提供函数声明和实现,即提供虚函数的默认实现 。
- 纯虚函数没有函数具体实现,只提供函数声明。
-
派生类是否实现
- 派生类可以选择是否覆盖虚函数的默认实现。
- 当一个类包含至少一个纯虚函数时,派生类必须提供具体实现,否则他们也变成抽象类。
-
实例化:
- 包含纯虚函数的类是抽象类,不能被实例化;
- 而包含虚函数的类不一定是抽象类,可以被实例化,除非它也包含纯虚函数。
-
目的:
- 虚函数用于提供一个可以在派生类中被重写的方法实现;
- 通过纯虚函数,抽象类提供一种接口规范,要求派生类必须提供具体实现。
-
动态绑定:
- 虚函数支持动态绑定,
- 纯虚函数由于没有实现,它们本身不参与动态绑定,但可以作为接口的一部分,影响整个类的多态性。
总结:
virtual
关键字。
虚函数是在基类中声明的,并且可以在派生类中被重写
。通过虚函数,可以在基类指针或引用中实现动态绑定,即在运行时确定调用哪个类中的函数实现。而纯虚函数是在虚函数后面加一个
=0
,
纯虚函数也是在基类中声明的,但它没有实现,只有声明
。
当一个类包含至少一个纯虚函数时,它就成为了一个抽象类,这意味着你不能实例化这样的类,但可以声明这种类型的指针或引用。当一个类包含至少一个纯虚函数时,派生类必须提供具体实现,否则他们也变成抽象。通过纯虚函数,抽象类提供一种接口规范,要求派生类必须提供具体实现。