c++学习笔记-动态绑定
来源:互联网 发布:无损音质软件 编辑:程序博客网 时间:2024/06/05 22:46
在腾讯笔试题遇到一个动态绑定的问题,所以研究一下,水平有限,说的不对请多指教
有如下C++代码:
1
2
3
4
5
6
7
8
9
struct
A{
void
foo(){
printf
(
"foo"
);}
virtual
void
bar(){
printf
(
"bar"
);}
A(){bar();}
};
struct
B:A{
void
foo(){
printf
(
"b_foo"
);}
void
bar(){
printf
(
"b_bar"
);}
};
那么
1
2
3
A *p=
new
B;
p->foo();
p->bar();
这个题的结果是barfoob_bar
为什么㖏,我们研究下哈,
首先说明一下,那两各foo()是非需函数,这是个不好的写法,他在这里只是说明动态绑定这个东西;
首先说一下说明是动态绑定:
动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
程序运行过程中,把函数(或过程)调用与响应调用所需要的代码相结合的过程称为动态绑定。
动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,他是多态实现的具体形式。以上是百度百科中的 借鉴一下,差不多就是这个意思。
现在我们定一个B* d,这时候d->foo();和p->foo();调动的是同一个函数吗?答案很明显是否定;
这里虽然函数名一样,但已经是静态绑定了,两个类型分别调用自己类内定义的foo()函数。
这时候在看一下p->bar 这里虽然p是个A型的指针,但是执行代码时涉及到一个动态绑定问题,p的实际类型是个B,所以调用B函数的bar()而不是A的;
最后总结一句话,只有虚函数才涉及到动态绑定,其他可以说都是静态绑定。
注意:A(){bar();}
这里,在构造函数或者析构函数里调用虚函数,此时虚函数不具有多态性。
0 0
- Objective-C 动态绑定 学习笔记
- Objective-C 学习笔记 9 多态,动态类型,动态绑定
- Object-C 学习笔记(十一)---动态绑定&异常处理
- c++学习笔记-动态绑定
- Programming in Objective C学习笔记03——多态、动态绑定和动态类型
- Java 学习笔记 (12) - 动态绑定
- c++ 动态绑定(c++学习笔记)
- c++ 动态绑定(c++学习笔记)
- j2se学习笔记-多态(动态绑定)
- objective-c学习笔记第六章《objective-c 多态,动态类型,动态绑定与java中的区别》
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第九章 多态,动态类型和动态绑定
- 学习笔记之 java的动态绑定与静态绑定
- 06.C++学习笔记------静态绑定动态绑定
- 【Java学习笔记】继承,动态绑定与静态绑定
- C++(四)动态绑定
- 【Java笔记】动态绑定
- iOS学习(二十四)Objective-C 动态绑定
- Java学习笔记——继承、动态绑定技术
- 浙江大学PAT_甲级_1083. List Grades (25)
- Gradle: Running a jar file
- Java多线程 synchronized关键字
- iOS开发UI -- 在storeBoard中通过标识符找到页面
- Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
- c++学习笔记-动态绑定
- Android开发中如何结束所有的activity
- Struts中的参数传值
- 单机伪分布式Hadoop 启动流程(mac10.10.3 ,hadoop-2.5.2)
- 在eclipse中将android项目生成apk并且给apk签名
- 条款26: 尽可能延后变量定义的出现时间
- 关于免费解决RedHat6.5的:This system is not registered to Red Hat Subscription Managemen
- 51nod1021:石子归并
- 文章标题