C++中的动态绑定
来源:互联网 发布:大司马淘宝 编辑:程序博客网 时间:2024/06/16 06:32
首先说明一下C++中的静态绑定和动态绑定
- 静态绑定:在编译时刻,根据变量的静态类型(变量声明为基类还是派生类)来决定调用哪个函数,用基类声明的,就调用基类的方法,用派生类声明的就调用派生类的方法。
- 动态绑定:在运行时刻,根据变量实际指向的对象类型(该变量指向基类还是派生类)来决定调用哪个函数。
C++中对普通函数时采用静态绑定的,对虚函数是采用动态绑定的。可以看下面的例子。
另外C++对虚函数有几点限制:
- 只有类的成员才可以是虚函数
- 静态成员函数不能是虚函数
- 构造函数不能是虚函数
- 析构函数可以(往往)是虚函数
#include <iostream>using namespace std;class A{ int m;public: void fun1(){ //普通函数,采用静态绑定 cout<<"class a fun1"<<endl; } virtual void fun2(){ //虚函数,采用动态绑定 cout<<"class a fun2"<<endl; }};class B:public A{ int n;public: void fun1(){ cout<<"class b fun1"<<endl; } virtual void fun2(){ cout<<"class b fun2"<<endl; }};void f1(A& a){ a.fun1();}void f2(A& a){ a.fun2();}int main(int argc, char * argv[]) { A a; B b; f1(a); f1(b); cout<<"----"<<endl; f2(a); f2(b); return 0;}
打印结果为:
0 0
- C++中的动态绑定
- C++ 中的动态绑定
- C++中的动态绑定
- C++中的动态绑定
- OC中的动态绑定
- java中的动态绑定
- C++中的动态绑定
- c++中的动态绑定
- Java中的动态绑定
- C++(四)动态绑定
- C#中的数据绑定
- C++中的动态绑定与静态绑定
- JAVA中的静态绑定和动态绑定
- java中的动态绑定和静态绑定
- java中的动态绑定和静态绑定
- Java中的静态绑定和动态绑定
- Java中的静态绑定和动态绑定
- Java中的动态绑定和静态绑定
- git简介及上传代码到github
- maven安装以及初试
- uCOS-II中PendSV_Handler和SysTick_Handler
- gitbub基本操作
- HTML5之启动篇-HTML5简介
- C++中的动态绑定
- eclipse中,如何正行上下移动
- egrep用法
- Collection--Set--hashSet
- 如何在eclipse中查看源码?
- [2] 数组和指针的前世今生 - 数组篇
- 实验四 看电视
- Redis-util 转换函数
- 【MySQL】统一控制台-pma-PHP编码!解决中文乱码问题