整理的一些关于虚函数的使用方法和注意点
2010-08-28 17:44
513 查看
在基类用virtual声明成员函数为虚函数,在派生类中重新定义该虚函数,要求函数名、函数返回类型、函数参数个数和类型与基类的虚函数相同。如果在派生类中没有对基类的虚函数重新定义,则派生类直接简单的继承该虚函数。
有一种情况例外,在这种情况下派生类与基类的成员函数返回类型不同,但仍起虚函数的作用。即基类虚函数返回一个基类指针或基类引用,而子类的虚函数返回一个子类的指针或子类的引用。
在C++中,当一个成员函数定义为虚函数后,其派生类中的同名成员函数都自动为虚函数。
一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同参数(个数与类型)和函数返回值类型的同名函数。
静态成员函数不能是虚函数,因为静态成员函数不受限与某个对象。
inline函数不能是虚函数,因为inline函数是不能在运行中动态确定其位置的,即使虚函数在类的内部定义,编译时,仍将其视为非inline的。
使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译器会为该类构造一个虚函数表(virtual function table, vtable), 它是一个指针数组, 存放每个虚函数的入口地址。
有一种情况例外,在这种情况下派生类与基类的成员函数返回类型不同,但仍起虚函数的作用。即基类虚函数返回一个基类指针或基类引用,而子类的虚函数返回一个子类的指针或子类的引用。
在C++中,当一个成员函数定义为虚函数后,其派生类中的同名成员函数都自动为虚函数。
一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同参数(个数与类型)和函数返回值类型的同名函数。
静态成员函数不能是虚函数,因为静态成员函数不受限与某个对象。
inline函数不能是虚函数,因为inline函数是不能在运行中动态确定其位置的,即使虚函数在类的内部定义,编译时,仍将其视为非inline的。
使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译器会为该类构造一个虚函数表(virtual function table, vtable), 它是一个指针数组, 存放每个虚函数的入口地址。
相关文章推荐
- 关于scrapy爬虫使用的一些小经验和注意事项
- 关于printf("%p",p);使用方法的一些总结
- 汇编debug中的常用指令,以及一些常用寄存器的使用方法整理,仅一些笔记,不喜勿喷
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 一些关于jQuery的使用方法
- scrapy一些非常实用资料整理,与其他mongdb、django、redis、solr、tor结合使用以及用Python脚本调用等等方法
- JQUERY中,复选框使用prop,attr方法时的一些注意
- 关于使用存储过程的一些好处以及注意事项
- 【原创】setjmp longjump一些注意点及使用方法
- jquery必须知道的一些常用特效方法及使用示例(整理)
- 关于ios的autoLayout的一些简单介绍以及使用方法
- iOS开发中一些重要的系统方法使用注意事项总结
- 关于使用存储过程的一些好处以及注意事项
- 在JAVA中, 在使用String.split方法时要注意的一些特殊分隔字符串
- Spring中关于view层的一些配置和使用方法
- 在网上找到的javascript关于文件操作的使用方法,感觉比较全面,仅作整理使用
- iOS 关于调整状态栏方向方法setStatusBarOrientation的使用注意事项
- python关于BIF、标准库方法使用的注意事项总结
- 关于SQL SERVER时间格式使用的一些总结 综合整理
- Xman整理篇___关于Python的一些基础方法及函数