C++中的虚函数
来源:互联网 发布:宽带连接未识别的网络 编辑:程序博客网 时间:2024/05/07 00:48
定义:在类的非静态成员函数前加virtual,这一函数就变成了虚函数。当从父类继承时,虚函数和被继承的函数具有相同的名字,在运行过程中,系统会根据对象的类型,自动的选择与之相适应的虚函数,这一方式大多是通过指针进行实现的。
#include "stdafx.h"class CDisplayDecimal{public:CDisplayDecimal(int i){ Number = i; }CDisplayDecimal(){ Number = 0; };virtual void DisplayFormat(){printf("The Decimal value is %d\n", Number);}protected:int Number;};class CDispOctal :public CDisplayDecimal{public:CDispOctal(int i){ Number = i; }CDispOctal(){ Number = 0; }virtual void DisplayFormat(){printf("The Octal value is %o\n", Number);}};class CDispHexadecimal :public CDisplayDecimal{public:CDispHexadecimal(int i){ Number = i; }CDispHexadecimal(){ Number = 0; }virtual void DisplayFormat(){printf("The Hexadecimal value is %x\n", Number);}};void DisplayNumber(CDisplayDecimal* Dispaly){Dispaly->DisplayFormat();}int _tmain(int argc, _TCHAR* argv[]){CDisplayDecimal dec(100);CDispHexadecimal hex(100);CDispOctal oct(100);DisplayNumber(&dec);DisplayNumber(&hex);DisplayNumber(&oct);return 0;}在本例中,利用虚函数进行数制的转换。
我们可以看到在通用函数void DisplayNumber(CDisplayDecimal* Dispaly){...}中
我们定义的指针类型是CDisplayDecimal,就是基类的指针类型,而我们传入的参数是子类的指针
运行结果为:
用指向基类的指针变量输出了所有的结果。
说明:本来,基类的指针是指向基类的对象的,如果用来指向派生类的对象,则进行指针类型转换,将派生类的指针转化为基类的指针,所以基类的指针指向的是派生类中基类部分。本来无法通过基类指针去调用派生类对象中的成员函数,虚函数突破了这一限制,在派生类的基类部分中,派生类的虚函数取代了基类中的虚函数,因此,基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数。
0 0
- [C++]C++中的虚函数
- c中的函数指针
- C ++ 中的函数
- C中的随机数函数
- c中的strtok函数
- c语言中的函数
- C中的static函数
- unix中的c函数
- C中的stat()函数
- C中的strncat()函数
- C中的qsort函数
- c中的字符串函数
- C中的access函数
- C语言中的函数
- C中的access函数
- C中的access函数
- C中的access函数
- C中的qsort函数
- Java——IO初步操作
- 打印数字图形
- 利用Stripes实现JavaWeb开发
- DAO设计模式-2
- 寒假英语的开启
- C++中的虚函数
- NYOJ 寻找最大数
- 爱情:溺水三千只取一瓢饮
- IE10 浏览器无法验证.Net表单登陆问题
- OpenMP
- 做每天的自己,你就可以很了不起
- Android组件_RadioButton
- hadoop
- 经典歌词 经典歌词大全