C++里的虚函数
来源:互联网 发布:上海零境网络 起诉 编辑:程序博客网 时间:2024/05/22 17:31
多态是指使用相同的函数名来访问函数不同的实现方法,即“一种接口,多种方法”,用相同的形式访问一组通用的运算,每个运算可能对应的行为不同。C++支持编译时多态和运行时多态,运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。
运行时多态的基础是基类指针,基类指针可以指向任何派生类对象。
1.虚函数是为了实现多态而存在的
#include using namespace std;class F{ public: void novir(){ cout << "father novir" <<endl; } virtual void vir(){ cout<< "father vir"<<endl; }}; class S : public F{ public: void novir(){ cout << "son novir"<<endl; } void vir(){ cout << "son vir"<<endl; }};int main(){ F f; S s; s.novir();// 子类起作用,输出为 son novir s.vir();//子类起作用,输出为son vir f.novir();//父类起作用(因为其本身在这里与子类没有关 系),输出father novir f.vir();// 父类起作用(因为其本身在这里与子类没有关系),输出father vir F *ff; ff = &s;//将一个父类指针指向一个子类对象;子类指针不能指向父类对象 ff->novir();//父类起作用,显示father novir ff->vir();//子类起作用,虚函数多态的用处,显示 son vir,具体参见下面解释 return 0;}
输出:
[root@localhost root]# ./vir
son novir
son vir
father novir
father vir
father novir
son vir
虚函数的多态体现
我们都知道,程序运行的过程要经过 预处理,编译,运行,链接等步骤。虚函数在程序运行的时候才被绑定,编译的时候不进行相关处理,只有运行的时候才对其进行相关操作。
所以在程序片:
F *ff; ff = &s;//将一个父类指针指向一个子类对象;子类指针不能指向父类对象 ff->novir();//父类起作用,显示father novir
ff->vir();//子类起作用,虚函数多态的用处,显示 son vir
程序在运行时决定调用虚函数的哪个定义,这个决定依赖于基类型指针所指向的对象的类型。通过点运算调用虚函数时,忽略了虚函数的多态性,只有使用基类型指针访问虚函数,运行时的多态性才得以体现。即C++根据指针指向对象的类型来决定调用虚函数的哪个定义,在这里,指针所指向的类型为子类对象,所以虚函数使用子类的函数。
0 0
- C语言里时间函数的操作
- C语言里的静态函数
- ctype.h里的函数(c语言)
- C/C++里的时间函数
- ctype.h里的函数(c语言)
- C语言里的延时函数
- lk里的经典c函数
- c语言结构体里的函数
- 在输入函数scanf()函数里%c的用法
- C里strlen函数和sizeof函数的作用
- C++里的虚函数
- c里常见的几个有用的函数总结
- 将图片写到excel里的函数 c#.net
- C++和C里,指向函数的指针有所不同
- C调用Python脚本文件里的函数(转)
- 怎样从Perl中调用C库里的函数
- C语言变参数函数的原里
- 杂,C里的几个字符串转换函数
- Java源码学习之Integer类(三)——好玩的位运算函数
- snort--byte_test,byte_jump用法
- 栈的应用举例
- 3-31博客
- 对接收数组参数的成员方法进行反射
- C++里的虚函数
- Socket编程-UDP协议
- Volley源码解析(一)
- SQL中的各种连接及查询
- 网站建设(3)——CDN及CDN加速原理
- OpenCV打开摄像头出现运行错误OpenCV Error:Assertion failed (size.width>0&&size.height>0)in cv::imshow,……
- 码农小汪-剑指Offer之30 -把数组排成最小的数(拼接字符串排序)
- 程序员真正的价值
- SPOJ QTREE Query on a tree (lct)