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

虚函数和纯虚函数有以下所示方面的区别 (1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了.纯虚函数只是

虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是:(1)纯虚函数只有定义,没有实现;而虚函数既有定义,也有实现的代码. 纯虚函数一般没有代码实现部分,如 virtual void print() = 0; 而一般虚函数必须要有代码的实现部分,否则会出现函数未定义的错误.virtual void print() { printf("This is virtual function\n"); } (2)包含纯虚函数的类不能定义其对象,而包含虚函数的则可以.

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

虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类

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

首先,二者申明不一样.virtual void test(void);//虚函数 virtual void test(void) = 0;//纯虚函数其次,如果一个类包含了一个纯虚函数(哪怕只有一个是纯虚函数),那么它就是一个抽象类就是不能生成具体的对象!但如果类中只包含虚函数,那么是可以定义具体的对象的!但二者又有一个相同点:都必须在子类中覆盖申明的虚函数!而不管是虚还是纯虚!

虚函数是用于后期动态绑定的,可以实现运行期多态.说白了就是一个函数指针,在运行的时候才确定最终要调用的目标.纯虚函数顾名思义就是完全虚的函数,它没有绑定到任何一个实际函数上,是空的.纯虚函数主要是用来阻止类的实例化,强制要求类的派生者必须实现该函数否则也不能实例化,相当于C#或java的abstract函数.如果一个类中所有的函数都是纯虚函数,则该类就构成了一个接口.

虚函数是在基类中作总体框架定义,定义时在函数的返回类型名前加上virtual构成.它的具体不同实现版本是在其类的派生类里实现的.纯虚函数是在其类中连基本框架都定义不出来,所以只是用“virtual 类型名 函数名()=0;”的形式来声明基类中有这么一个函数,而它的实现则完全由基类的派生类根据不同需要来完成.有纯虚函数的基类叫抽象类,不能被实例化(即不能生成对象),只能被继承.我的理解是:虚函数实现的具体版本中总是有通用的部分,这些通用部分可以在基类中定义,而纯虚函数则完全没有能共用的部分,完全是由派生类中不同的实现完成的.供参考……

定了纯虚函数之后这个类就变成了 虚基类 想继承他的类 就必须要自己定义这个纯虚函数 不然这个类就不可以定义对象虚函数不用

虚函数是在基类中定义的,目的是不确定它的派生类的具体行为.例: 定义一个基类:class Animal//动物.它的函数为breathe()//呼吸. 再定义一个类class Fish//鱼 .它的函数也为breathe() 再定义一个类class Sheep //羊.它的函数也为

相关文档

fkjj.net
xmlt.net
xmjp.net
hyqd.net
2639.net
电脑版