C++ 消息(成员函数调用)的动态绑定
来源:互联网 发布:软件行业发展趋势 编辑:程序博客网 时间:2024/05/21 05:56
1. 消息的多态性
C++把类看作类型,把以public方式(严格讲:只有public方式)继承的派生类看做基类的子类型,这样就使得在C++面向对象程序中存在下面的三种多态:
1)对象类型的多态:派生类对象的类型既可以是派生类,也可以是基类。
2)对象标志的多态:基类的指针或引用可以指向或引用基类对象,也可以指向或引用派生类对象。(但是派生类的指针只能指向或引用派生类对象,不能指向或引用基类对象,可以理解为可以将多的给少的,但是不能把少的给多的。)
3)消息的多态,一个可以发送到基类对象的消息,也可以发送到派生类对象。
2. 静态绑定
在编译时刻绑定数据的类型。(默认)
3. 动态绑定
在运行的时候绑定数据的类型。
class A{ int x,y; public: void f();}class B: public A{ int z; public: void f(); void g();}void func1(A& x){ x.f();//调用A::f,因为C++是静态绑定}void func2(A* p){ p->f();//调用A::f,因为C++是静态绑定}
3. 虚函数与消息的动态绑定
1)虚函数的定义
在函数返回类型前面加上virtual
class A{... public: virtual void f();//虚函数}限制:
a. 只有类的成员函数才可以是虚函数
b. 静态成员函数不能是虚函数
c. 构造函数不能是虚函数
d. 析构函数可以是(往往)是虚函数
2)虚函数的动态绑定
基类中的一个成员函数如果被定义成虚函数,则在派生类中定义的与之相同型构的成员函数是对该基类成员函数的重定义(或称覆盖,override)。
相同型构:函数名相同、参数类型和个数相同、返回值类型相同或者是基类成员函数返回值类型的派生类
class A{ int x; public: virtual void f();}class B: public A{ int y; public: void f(); void g();}A *p = new B;p->f(); //OK,调用B的fp->g(); //Error,因为A中没有g((B*)p)->g(); //OK,调用B的g
0 0
- C++ 消息(成员函数调用)的动态绑定
- C++调用空指针对象的成员函数——静态绑定与动态绑定
- JAVA函数调用的动态绑定
- boost::bind无参非成员函数的绑定和调用(一)
- 成员函数指针,动态绑定(vc平台)
- (C#)利用反射动态调用类成员
- (C#)利用反射动态调用类成员
- (C#)利用反射动态调用类成员[转载]
- (C#)利用反射动态调用类成员
- (C#)利用反射动态调用类成员
- (C#)利用反射动态调用类成员
- (C#)利用反射动态调用类成员[转载]
- 深入探索c/c++函数(2)---普通成员函数调用的基本过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 深入探索c/c++函数(2)---普通成员函数调用的基本过程
- 深入探索c/c++函数(2)---普通成员函数调用的基本过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 深入探索c/c++函数(3)---虚成员函数调用的基本过程
- 设计模式随笔之状态模式(State)
- Java可变长参数varargus
- 如何实现复杂的listview的效果
- 修改Ubuntu/Linux终端显示的路径长度
- Android中判断网络是否可用的代码分享
- C++ 消息(成员函数调用)的动态绑定
- leetcode 338. Counting Bits
- LinkedList源码分析(基于jdk1.8)
- RecyclerView使用介绍
- 常用类-包装类-Math-Object
- JVM体系结构与工作方式概览
- 手机端HTML5 input被输入法遮挡的jquery解决办法
- 中南大学第十一届大学生程序设计竞赛-COJ1902-Happy Chinese Poker
- CodeForces 631 A.Interview(水~)