联编:将一个调用函数者联结上正确的被调用函数,这一过程叫做函数联编,简称联编。
C++中的联编分为静态联编和动态联编。
静态联编:被调函数和调用函数者的关系以及它们的内存地址在编译时已经确立好,运行时不再发生变化。好处:因为运行时候不用对各个对象的函数进行追踪,只需要传递参数、执行确定好的函数并在函数调用完毕后清理内存,因此速度快,
动态联编:牺牲掉一些速度,在运行前每个函数调用是不可确立的,随着用户的操作来执行相应的函数。
其实加virtual的函数就是动态联编,不加就是静态联编,上面只是叙述其原理,可以了解就行。举例如下:
class A
{
public:
virtual void print(){cout<<"a"<<endl;}
}
class B : public A
{
public:
void print(){cout<<"b"<<endl;}
}
class C : public A
{
public:
void print(){cout<<"c"<<endl;}
}
int main()
{
A a;
B b;
C c;
A* p1 = &a;
A* p2 = &b;
A* p3 = &c;
p1->print();
p2->print();
p3->print();
return 0;
}
如果类A中不加virtual,就会因为是静态联编导致输出都是a,加上virtual后就是动态联编,输出结果就变成a,b,c;
注意:只有使用指针或者引用时才会发生动态联编.