C++学习笔记--虚函数的使用
来源:互联网 发布:淘宝助理可以用吗 编辑:程序博客网 时间:2024/05/05 07:42
虚函数系C++多态性的关键!
先来点直观的定义 虚函数:用Virtual声明的方法(成员函数)。 多态性:采用迟绑定技术,就是编译的时候未确定调用哪个函数,运行时候依据对象的类型确认。
这里牵涉到多态性的编译原理和RTTI的细节,不展开。
//my.h
class Student{ void printStu { cout<<"Student"<<endl;}}class HighStudent:Public Student{ virtual void printStu {cout<<"HighStudent"<<endl;}}class CollegeStudent:Public Student{ virtual void printStu {cout<<"CollegeStudent"<<endl;}}//my.cpp
int main(){Student student1;HighStudent highstudent2;CollegeStudent collegestudent3;Student *pStu;pStu->printStu();pStu=&highstudent2;pStu->printStu();pStu=&collegestudent3;pStu->printStu();}
注意到指针一直都是基类Student的,而且,引用函数的语句完全一样的。输出结果为:
Student
HighStudent
CollegeStudent
-----------------------------------------------------------没错,我就是分割线!-----------------------------------------------------------------------------------------------------
为了不至于每个派生类都加virtual,只需在基类的成员函数加上virtual,这样生成的派生类如果有同名函数,则自动为虚函数.
C++虚函数的时候关键点:确认对象的类型,就能确认调用的是基类或是派生类的成员函数了.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
虚函数还有一个和重要的行为方式。以下摘自《深入浅出MFC》
程序代码如下:
结果:
这个例子说明了调用虚函数的巧妙,需要好好回味以下。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本来第二个行为模式也想自己写出来的,奈何学艺不精,脑海知道是怎么回事,但是却不可以很清晰很有条理地阐述出来。只能说明还未有完全建立知识体系。加油,如果你感到辛苦困难,可能是因为你在上坡路上。共勉!
参考资料:《C++ Prime Plus 中文版》第五版 、《深入浅出MFC》
- C++学习笔记--虚函数的使用
- C语言学习笔记--------伊能C语言学习笔记----使用指针来解决函数的副本机制
- C++:函数<学习笔记>
- 【C++】【学习笔记】【006】函数的重载
- C语言的学习笔记2-函数
- C函数使用笔记
- 学习笔记3-C++-虚函数
- Lua学习笔记二--在Lua中使用自己的C函数
- Lua学习笔记二--在Lua中使用自己的C函数收藏
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- C语言学习笔记(19跨函数使用内存)
- python学习笔记--使用ctypes调用C函数
- 【cocos2dx学习笔记】update函数的使用
- unix学习笔记------msgctl函数的使用
- Python学习笔记(2):函数的使用
- 学习oracle函数使用的笔记
- C学习笔记之函数
- C语言函数使用笔记
- ThinkPHP 实现 Oracle 数据字典
- C++零基础入门学习(类模版)
- 匹配阻抗
- Assembly.LoadFile或LoadFrom 后文件不释放
- generator自动生成mybatis配置和类信息
- C++学习笔记--虚函数的使用
- 精少则病——大道至简,大道同源
- 关于jsp页面显示的时间格式和Oracle数据库中的格式不一样的问题
- 一种判断高级浏览器的方法
- 专访“Monster Blade”创始人:无需营销,百万下载背后的秘密
- ARC使用
- 字符串编辑距离
- tar 解压缩命令
- 网页中实现"在线客服"功能