您的位置 电脑知识爱好者 >> 编程知识 >> 关于动态联编和静态联编的问题?

关于动态联编和静态联编的问题?

电脑知识爱好者互联网本站整理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


参与评论
相关内容
关于我们 | 隐私政策 | 站点地图 | 站长博客|京ICP备07025396号
添加到百度搜藏 添加到百度搜藏 电脑知识爱好者Copyright ?2006-2008版权所有 我要啦免费统计