首页技术虚函数和纯虚函数的区别,虚函数的概念与作用

虚函数和纯虚函数的区别,虚函数的概念与作用

编程之家2026-06-17978次浏览

本篇文章给大家谈谈虚函数和纯虚函数的区别,以及虚函数的概念与作用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

虚函数和纯虚函数的区别,虚函数的概念与作用

虚函数和纯虚函数的区别和作用

虚函数和纯虚函数的区别:声明方式不同、实现方式不同、覆盖方式不同、特性不同、用法不同。

1、声明方式不同

虚函数可以在类中声明,也可以在类的外部声明,编译器会自动将它们转换为虚函数;但是纯虚函数只能在类中声明,而不能在类的外部声明。

2、实现方式不同

虚函数可以有实现,也可以没有实现;而纯虚函数没有实现,不可以有实现。

3、覆盖方式不同

虚函数和纯虚函数的区别,虚函数的概念与作用

虚函数可以在子类中覆盖,也可以不被覆盖;而纯虚函数必须在子类中覆盖,否则编译器将报错。

4、特性不同

虚函数可以被多态调用,也可以被静态调用;而纯虚函数只可以被多态调用,不可以被静态调用。

5、用法不同

虚函数可以用来实现多态,可以根据调用对象的实际类型,而不是根据声明类型来调用适当的函数。这样可以有效地实现代码的重用,避免了重复编码。

纯虚函数可以用来实现抽象类,一个抽象类是指一个类中定义了至少一个纯虚函数的类。这样可以定义一个抽象的接口层,子类可以通过实现纯虚函数来实现抽象接口的不同功能。

虚函数和纯虚函数的区别,虚函数的概念与作用

C/C++面试题:虚函数与纯虚函数有什么区别

虚函数和纯虚函数有以下所示方面的区别

(1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。

(2)虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现,这就像Java的接口一样。通常把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为很难预料到父类里面的这个函数不在子类里面不去修改它的实现。

(3)虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然大家也可以完成自己的实现。纯虚函数关注的是接口的统一性,实现由子类完成。

(4)带纯虚函数的类叫虚基类,这种基类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。这样的类也叫抽象类。

c++中的纯虚函数与虚函数在应用上有什么差别

纯虚函数就是为了阻止这个类的实例化。使其成为抽象类。

当然虚函数不提供实现看起来也能阻止类的实例化,但它和纯虚函数比起来还有以下不足:

1、一方面,从语法上说是不清晰的,你的类的使用者在在看到你的类的定义的时候无法确定哪些函数是没有提供实现的虚函数,而如果你写成纯虚函数就非常明确,一眼就可以看出来。

2、另一方面,虚函数不提供实现,如果使用者试图实例化这个类,在编译阶段无法发现错误,必须等到链接阶段才能发现,而且链接错误也仅仅是“无法解析的外部符号”,这种错误提示很不明确,当错误较多时很难找到真正的原因。而如果是纯虚函数则编译器在编译阶段就直接会报错,并且会在错误中明确告知使用者不应实例化抽象类,非常便于定位错误。

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

lol赏金 lol赏金规则自动写代码的软件,哪个AI写代码最强