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

作者&投稿:守褚 (若有异议请与网页底部的电邮联系)
~

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

1、声明方式不同

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

2、实现方式不同

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

3、覆盖方式不同

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

4、特性不同

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

5、用法不同

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

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




想问下C++纯虚函数相比于虚函数的直接作用
这样所有像Animal的成员函数Draw那样,需要绘图的函数,都只需要有一个抽象类的指针或者引用,就可以绘图了,这就是纯虚函数的意义。再举个伪代码的例子:class Animal { public:virtual SayHi()= 0;\/\/无法实现,也没有必要实现。当然写个空的虚函数也行,但是万一我的函数需要返回值怎么办?强行写个...

下列表示纯虚函数的成员函数是( )。A.virtualintfunc(int);B.voidfunc...
【答案】:C C。【解析】本题考查纯虚函数的定义形式。由于纯虚函数在最后要有“=0”,故据此排除A和D。而B中没有出现virtual关键词,故正确答案为C。

什么是纯虚类
纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

java和c有什么关系?
4、在抽象方法或抽象类的区别C语言的对等语法是“纯虚函数”和“抽象类”Java使用abstract关键字修饰抽象方法或抽象类,final类不能被继承。C语言和JAVA是什么关系? JAVA是基于C语言的基础上于近年开发出来的一款新的编程软件。。C语言可以作为进入编程的一个基础。JAVA可以作为编程的深入发展。。JAVA用的范围绝对比C...

23. 什么是虚函数?
虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本。有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。定义纯虚函数就是为了让基类不可实例...

举个具体的例子,动态多态有啥用啊
封装性、继承性和多态性构成了面向对象程序设计语言的三大特性。封装性是基础,继承性是关键,多态性是扩充。多态性是指对不同类的对象发出相同的消息将会有不同的行为。消息主要是指对类的成员函数的调用,不同的行为是指不同的实现。本部分主要介绍多态性;动态联编;虚函数;纯虚函数和抽象类等重要...

请问在c++中,设计含有纯虚函数的类中,应不应该有成员数据?
一般应该有,纯虚函数只是不能实例化而已,其作用是提供一个基本的基类,将派生类中的相同部分集中起来定义,避免重复定义,方便使用。

C++在一个类中,定义void function()= 0;这句话什么意思额?
virtual void function()=0;为声明一个纯虚函数,拥有纯虚函数的类为抽象类,只用于做继承中的基类。纯虚函数需要在子类中重新定义,对于暂无法实现或不想给出有意义的定义的函数,可以声明为纯虚函数,类给派生类实现。

什么局部类函数没有是函数体啊
没有函数体的函数 纯虚函数 如: void fun() = 0;通常作为接口,继承类必须实现.

纯虚函数引入原因
在很多实际场景中,基类直接实例化并不合理。例如,以动物为基类,衍生出具体的动物种类如老虎和孔雀,但动物作为实体本身创建对象显然不符合常规逻辑。为了解决这种设计上的冲突,引入了纯虚函数的概念。纯虚函数的定义形式为 "virtual ReturnType Function()= 0;",表示该函数在基类中并未提供实现,仅...

蓬江区18327169354: c++的虚函数和纯虚函数有什么不同呀? -
泣常抗力: 相同点:虚函数和纯虚函数都是为了实现多态机制的,目的是给派生类修改基类行为的机会. 不同点:虚函数可以在基类中定义默认的行为,如果派生类没有对其行为进行覆盖,则基类的默认行为生效,如果派生类对其覆盖,则会自动调用派生类的行为;纯虚函数不在基类中提供默认的行为,只是提供一个接口声明. 因此,纯虚函数只是声明接口,不提供行为实现.包含了纯虚函数的类被称为虚基类,无法声明实例.纯虚类生来就是需要被继承并修改其行为的.

蓬江区18327169354: 什么是虚函数?什么是纯虚函数? -
泣常抗力: 虚函数是指一个类中你希望重载的成员函数,当你用一个基类指针或引用指向一个继承类对象的时候,你调用一个虚函数,实际调用的是继承类的版本. 有纯虚函数的类是抽象类,不能生成对象,只能派生.他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类. 定义纯虚函数就是为了让基类不可实例化化, 因为实例化这样的抽象数据结构本身并没有意义. 或者给出实现也没有意义 实际上我个人认为纯虚函数的引入,是出于两个目的, 1.为了安全.因为避免任何需要明确但是因为不小心而导致的未知的结果. 提醒子类去做应做的实现. 2.为了效率,不是程序执行的效率,而是为了编码的效率.

蓬江区18327169354: C++ 虚函数和纯虚函数的区别 -
泣常抗力: 虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码. 纯虚函数一般没有代码实现部分,如 virtual void print() = 0; 而一般虚函数必须要有代码的实现部分

蓬江区18327169354: C/C++面试题:虚函数与纯虚函数有什么区别 -
泣常抗力: 虚函数和纯虚函数有以下所示方面的区别 (1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了.纯虚函数只是...

蓬江区18327169354: c++中的纯虚函数与虚函数在应用上有什么差别?? -
泣常抗力: 纯虚函数就是为了阻止这个类的实例化.使其成为抽象类. 当然虚函数不提供实现看起来也能阻止类的实例化,但它和纯虚函数比起来还有以下不足: 1、一方面,从语法上说是不清晰的,你的类的使用者在在看到你的类的定义的时候无法确定哪些函数是没有提供实现的虚函数,而如果你写成纯虚函数就非常明确,一眼就可以看出来. 2、另一方面,虚函数不提供实现,如果使用者试图实例化这个类,在编译阶段无法发现错误,必须等到链接阶段才能发现,而且链接错误也仅仅是“无法解析的外部符号”,这种错误提示很不明确,当错误较多时很难找到真正的原因. 而如果是纯虚函数则编译器在编译阶段就直接会报错,并且会在错误中明确告知使用者不应实例化抽象类,非常便于定位错误.

蓬江区18327169354: 想问下C++纯虚函数相比于虚函数的直接作用 -
泣常抗力: 1. 虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类.2. 虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,...

蓬江区18327169354: 虚函数与纯虚函数的区别,我的理解是不是子类的函数实现了父类的函数,但是重写了方法,就是纯虚函数 -
泣常抗力: 1. lz的理解还是有些出入.虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码. (2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以. 2. 虚函数的引入主要是为了实现多态,这部分内容是c++的精髓. 3. lz不懂可继续追问

蓬江区18327169354: C++中纯虚函数和空的虚函数各自的作用是什么呢?他们应该怎么样区分呢? -
泣常抗力: 虚函数是C++多态的一种表现 例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数). 使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价.如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl 函数名=0 我们把这样的函数(方法)称为纯虚函数. 如果一个类包含了纯虚函数,称此类为抽象类

蓬江区18327169354: 纯虚函数和虚函数有什么区别吗(我知道它们的声明方式) -
泣常抗力: 使用虚函数,可以灵活的进行动态绑定,当然是以一定的开销为代价. 如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virtual 函数名=0 我们把这样的函数(方法)称为纯虚函数.也就是说,虚函数 ,子类可以不重写,直接继承父类 的方法来使用,也可以重写 但是 纯虚函数是子类是必须重写了才可以使用

蓬江区18327169354: C++中纯虚函数和虚函数在定义上的区别是什么 -
泣常抗力: 主要就是纯虚函数相比虚函数在定义的时候没有定义函数体而且会在定义的时候在后面多加一句“=0”

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网