概述
虚函数的作用
虚函数的使用方法
在什么情况下应该声明虚函数
使用虚函数时,有两点要注意:
只有类的成员函数才能被声明虚函数,即虚函数只用于类的继承层次结构中
一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个该虚函数同名、同类型和同参数同名非虚函数。
使用虚函数,系统要有一定的额外空间开销。
当一个类带有虚函数时,编译系统会为该类构造一个虚函数表(virtual function table,简称vtable),它是一个指针数组,存放每个虚函数的入口地址
系统在进行动态关联时的时间开销是很少的,因此,多态性是高效的。
1.先看成员函数所在的类是否会作为基类,再看成员函数在类的继承后有无可能被更改功能。如果希望更改其功能的,一般应该将它声明为虚函数;
2.如果成员函数在类被继承后功能不需修改,或派生类用不到该函数,则不要把它声明为虚函数;
3.应考虑对成员函数的调用是通过对象名还是通过基类指针或引用去访问,如果是通过基类指针或引用去访问的,则应当声明为虚函数;有时,在定义虚函数时,并不定义其函数体,即函数体是空的。它的作用只是定义了一个虚函数名,具体功能留给派生类去添加.
虚析构函数
析构函数的作用是在对象撤销之前做必要的“清理现场”的工作。当派生类的对象从内存中撤销时一般先调用派生类的析构函数,然后再调用基类的析构函数。但是,如果用new运算符建立了临时对象,若基类中有析构函数,并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时,会发生一个情况: 系统会只执行基类的析构函数,而不执行派生类的析构函数。
如果将基类的析构函数声明为虚函数时,由该基类所派生的所有派生类的析构函数也都自动成为虚函数,即使派生类的析构函数与基类的析构函数名字不相同。
最好把基类的析构函数声明为虚函数。这将使所有派生类的析构函数自动成为虚函数。这样,如果程序中显式地用了delete运算符准备删除一个对象,而delete运算符的操作对象用了指向派生类对象的基类指针,则系统会调用相应类的析构函数。
最后
以上就是自信火车为你收集整理的干货——C++虚函数的使用方法的全部内容,希望文章能够帮你解决干货——C++虚函数的使用方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复