C++中为什么需要多态
2012-03-07 20:29
246 查看
程序员的需求产生了多态,这个需求是:
在处理类型层次时,程序员希望不把对象看做莫一种特殊的类型形式,而是把它看做基本类型;
这个需求引发了一个问题:
编译器在编译时不能确定应当执行那个派生类的代码,这种是早捆绑引起的;
什么是早捆绑(early binding):
编译程序时,根据调用就可以确定程序运行时调用函数的地址;
什么是晚捆绑(late binding):
在编译程序时,无法确定调用函数的地址,只有运行时通过对象自带信息计算调用函数地址;
问题的解决:
编译器采用晚捆绑技术;
晚捆绑的实现原理:
通过存放在对象中的自身信息,程序运行时计算出调用函数函数体的地址;
版绑定需要说明:
使用关键之virtual向编译器指出;
在处理类型层次时,程序员希望不把对象看做莫一种特殊的类型形式,而是把它看做基本类型;
这个需求引发了一个问题:
编译器在编译时不能确定应当执行那个派生类的代码,这种是早捆绑引起的;
什么是早捆绑(early binding):
编译程序时,根据调用就可以确定程序运行时调用函数的地址;
什么是晚捆绑(late binding):
在编译程序时,无法确定调用函数的地址,只有运行时通过对象自带信息计算调用函数地址;
问题的解决:
编译器采用晚捆绑技术;
晚捆绑的实现原理:
通过存放在对象中的自身信息,程序运行时计算出调用函数函数体的地址;
版绑定需要说明:
使用关键之virtual向编译器指出;
相关文章推荐
- C++ 虚函数、多态、为什么需要虚拟析构函数
- 【转】C++的继承与多态:为什么需要虚函数
- 在C++中调用c程序为什么需要C extern关键字
- 为什么c++程序调用c编译器编译的函数需要在调用前加上extern“C”
- 为什么Android系统需要使用C、C++和Java语言共同开发
- C++中有个malloc/free,为什么还需要new/delete?
- C++调用C编译的变量和函数为什么需要extern
- C++中为什么需要将new对象通过独立语句置入智能指针
- C++中的为什么需要虚析构函数
- 从内存上解析c++中数组为什么不支持多态
- C++为什么remove以后需要erase
- C++为什么需要定义自己的复制构造函数
- C++ 为什么要使用指针(需要再总结一下)
- C++中为什么要用虚函数、指针或引用才能实现多态?
- [C++] 为什么Linux需要itoa函数
- C++为什么需要成员初始化列表
- C++中为什么要用虚函数、指针或引用才能实现多态?
- C++中有了malloc/free,为什么还需要new/delete?
- [C++] 为什么Linux需要itoa函数
- 为什么需要override和new两种多态方案