关于动态联编和静态联编的问题?
电脑知识爱好者互联网本站整理2007-9-7 0:45:28
知识重点:#includeiostream.h class base { private: int i; public: base( int a=0 ):i(a){} virtual int sum(void) const { return i; } }; class derived:public base ..
#include<iostream.h> class base { private: int i; public: base( int a=0 ):i(a){} virtual int sum(void) const { return i; } }; class derived:public base { private: int j; public: derived(int a=0, int b=0):base(a),j(b){} virtual int sum(void) const { return base :: sum()+j; } }; void call(base B) //这里不是base &B { cout<<"sum="<<B.sum()<<endl; } int main() { base b(10); derived d(10,40); call(b); call(d); return 0; } 这个测试执行的结果就是 sum=10 sum=10 而不是预期的 sum=10 sum=50 也就是说程序是静态联编而没有动态联编 所以我想问的是动态联编和静态联编它们各自的条件,就是说什么时候只能是静态联编,什么时候只能用动态联编。谢谢 要在C++里面使用动态联编(即获得多态性的行为),被调用的函数必须是虚函数,而且对象必须是通过指针或者引用去操作的。如果直接操作一个对象(而不是通过指针或引用),它的确切类型就已经为编译器所知,因此也就变成了静态联编而不是动态联编了。
可以试着将call函数的参数改为指针或者引用
参考资料:C++程序语言设计(The C++ Programming Language) 裘宗燕译,P278
参与评论
- 相关内容
- 最近更新
- ·索爱w830能不能从网上下载游戏
- ·手机无故自动关机是什么原因,可以..
- ·N73能待机几天?
- ·三星P518手机带有和电脑连接的数..
- ·N73普通/音乐版/网络版那个好?
- ·请问诺基亚6300有网络摄像头功能..
- ·我的诺基亚N6300。怎么没有游戏可..
- ·夏新m3怎么用数据线连接不上电脑..
- ·有什么方法在语言拦里不显示QQ头..
- ·哪个部位最容易吻醒QQ宠物猪猪
添加到百度搜藏