虚函数和纯虚函数可以定义在同一个类中,含有纯虚函数的类被称为抽象类,而只含有虚函数的类不能被称为抽象类。
虚函数可以被直接使用,也可以被子类重载以后,以多态的形式调用,而纯虚函数必须在子类中实现该函数才可以使用,因为纯虚函数在基类有声明而没有定义。
虚函数和纯虚函数都可以在子类中被重载,以多态的形式被调用。
虚函数和纯虚函数通常存在于抽象基类之中,被继承的子类重载,目的是提供一个统一的接口。
虚函数的定义形式:virtual{};
纯虚函数的定义形式:virtual { } = 0;
在虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时要求前期绑定,然而虚函数却是动态绑定,而且被两者修饰的函数生命周期也不一样。
虚函数充分体现了面向对象思想中的继承和多态性这两大特性,在C++语言里应用极广。比如在微软的MFC类库中,你会发现很多函数都有virtual关键字,也就是说,它们都是虚函数。难怪有人甚至称虚函数是C++语言的精髓。
定义纯虚函数就是为了让基类不可实例化,因为实例化这样的抽象数据结构本身并没有意义或者给出实现也没有意义。
纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。
虚函数在子类里面也可以不重载的;但纯虚必须在子类去实现,这就像Java的接口一样。通常我们把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为你很难预料到父类里面的这个函数不在子类里面不去修改它的实现。
想问下C++纯虚函数相比于虚函数的直接作用
\/\/虽然抽象类不能实例化,但是可以用它的引用或者指针,这就是纯虚函数能被利用的关键 这个函数只需要个动物参数,而动物类的所有函数在没有被具体到或者说继承到某个动物身上时是无法被实现的,但是所有的具体动物都可以作为参数传给我的函数,而且只要是动物传进来,不管是什么动物,我的函数都能正常...
c++中的纯虚函数与虚函数在应用上有什么差别??
2、另一方面,虚函数不提供实现,如果使用者试图实例化这个类,在编译阶段无法发现错误,必须等到链接阶段才能发现,而且链接错误也仅仅是“无法解析的外部符号”,这种错误提示很不明确,当错误较多时很难找到真正的原因。 而如果是纯虚函数则编译器在编译阶段就直接会报错,并且会在错误中明确告知使用者不...
C\/C++面试题:虚函数与纯虚函数有什么区别
(1)类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。(2)虚函数在子类里面也可以不重载的;但纯虚函数必...
C++中虚函数和纯虚函数的区别
1. 声明了虚函数的类,该函数是已实现的,即使为空实现。其作用是允许这个函数在子类中重写,以便编译器可以使用动态绑定实现多态(即父类指针指向子类对象,调用子类方法)。而纯虚函数只是在基类中的一个函数定义,即一个函数声明,具体的实现需要留到子类中。2. 虚函数在子类中也可以不进行重写(...
虚函数和纯虚函数的区别和作用
虚函数可以用来实现多态,可以根据调用对象的实际类型,而不是根据声明类型来调用适当的函数。这样可以有效地实现代码的重用,避免了重复编码。纯虚函数可以用来实现抽象类,一个抽象类是指一个类中定义了至少一个纯虚函数的类。这样可以定义一个抽象的接口层,子类可以通过实现纯虚函数来实现抽象接口的不同...
虚函数和纯虚函数的区别和作用
虚函数的作用是“运行时多态”和重载,父类中提供虚函数的实现,为子类提供默认的函数实现;子类可以重写父类的虚函数实现子类的特殊化。虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstractclass),而只含有虚函数的类(class)不能被称为抽象类(abstractclass)。虚...
虚函数和纯虚函数的区别和作用
作用不同。虚函数的作用是“运行时多态”和重载,父类中提供虚函数的实现,为子类提供默认的函数实现;子类可以重写父类的虚函数实现子类的特殊化。纯虚函数是抽象类,包含纯虚函数的类称为抽象类,它只提供申明,不实现。函数简介:函数(function),数学术语。其定义通常分为传统定义和近代定义,函数...
C++考题中提到纯虚拟函数是什么概念?起什么作用?
virtual void funtion1()=0 引入原因\/纯虚函数的作用 为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决上述问题,引入了纯虚函数的概念,将函数定义为...
什么时候一定要使用虚函数而不能使用纯虚函数,请举实例。
虚函数主要是用来定义一个函数,且允许这个函数调用的时候,在可能的情况下调用派生类重载的函数。举一个实例的话,就是析构函数。父类可以有一个析构函数来处理父类里面分配的内存之类的事情,派生类也有一个析构函数来处理派生类中的相关事情。于是这就无法使用纯虚函数了。
c++中虚函数和纯虚函数有什么区别?
virtual void test(void);\/\/虚函数 virtual void test(void)= 0;\/\/纯虚函数 其次,如果一个类包含了一个纯虚函数(哪怕只有一个是纯虚函数),那么它就是一个抽象类——就是不能生成具体的对象!但如果类中只包含虚函数,那么是可以定义具体的对象的!但二者又有一个相同点:都必须在子类中...