【笔试】虚函数和纯虚函数的区别
2015-04-17 17:28
134 查看
虚函数和纯虚函数的区别
虚函数和纯虚函数的区别虚函数
纯虚函数
区别
1. 虚函数:
定义:简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。作用:实现多态性(Polymorphism),多态性是将接口与实现进行分离;实现以共同的方法,但因个体差异,而采用不同的策略。
指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
限制:
非类的成员函数不能定义为虚函数,类的成员函数中静态成员函数和构造函数也不能定义为虚函数,但可以将析构函数定义为虚函数。
实际上,优秀的程序员常常把基类的析构函数定义为虚函数。因为,将基类的析构函数定义为虚函数后,当利用delete删除一个指向派生类定义的对象指针时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。
只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,而定义函数时不需要使用关键字“virtual”。
当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数自动成为虚函数。
如果声明了某个成员函数为虚函数,则在该类中不能出现和这个成员函数同名并且返回值、参数个数、类型都相同的非虚函数。在以该类为基类的派生类中,也不能出现这种同名函数。
2. 纯虚函数
定义:纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。格式:
[code]class <类名> { virtual <类型> <函数名>(<参数表>) = 0; };
凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
3. 区别
虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。
虚函数的定义形式:
virtual {method body};
纯虚函数的定义形式:
virtual { } = 0;
虚函数必须实现,如果不实现,编译器将报错,错误提示为:
对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。
如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。
包含纯虚函数的类不能定义其对象,而包含虚函数的则可以。
相关文章推荐
- 纯虚函数虚函数的区别
- C++虚函数和纯虚函数的区别
- 虚函数和纯虚函数的作用与区别
- 虚函数和纯虚函数的区别
- C++虚函数和纯虚函数区别
- C++虚函数和纯虚函数的区别
- 虚函数和纯虚函数的区别
- C++ Primer--虚函数与纯虚函数的区别
- 虚基类、虚函数、纯虚函数的用法及其区别
- 虚函数、纯虚函数、普通函数的区别
- C++ 虚函数和纯虚函数的区别
- 虚函数和纯虚函数的区别(转载)
- 深入分析 虚函数 纯虚函数 的作用及区别
- C++学习 虚函数和纯虚函数的区别
- 虚函数和纯虚函数的区别
- 虚函数和纯虚函数的区别
- 虚函数,纯虚函数区别
- C++ 虚函数和纯虚函数的区别
- 虚函数和纯虚函数的区别
- 虚函数与纯虚函数的区别