联编:将一个调用函数者联结上正确的被调用函数,这一过程叫做函数联编,简称联编。
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;
注意:只有使用指针或者引用时才会发生动态联编.
本文介绍了C++中函数联编的概念,区分了静态联编和动态联编,并通过具体代码示例展示了如何使用virtual关键字实现多态及动态联编。理解动态联编对于掌握C++面向对象编程至关重要。
5253

被折叠的 条评论
为什么被折叠?



