moba单机手游:关于C++动态联编和静态联编的问题?

来源:百度文库 编辑:高考问答 时间:2024/05/09 09:26:29
#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
也就是说程序是静态联编而没有动态联编
所以我想问的是动态联编和静态联编它们各自的条件,就是说什么时候只能是静态联编,什么时候只能用动态联编。谢谢

动态联编必须包括以下方面:
成员函数必须申明为virtual
如果基类中申明了为虚函数,则派生类中不必再申明。

调用方式:
通过对象的指针或引用调用成员函数;或通过成员函数调用