静态联编和动态联编
编译器将源代码中的函数调用解释为执行特定的函数代码块,这一行为被称为函数名联编(binding)。联编行为发生在编译过程中则被称为静态联编(static binding),又称为早期联编(early binding)。然而,虚函数使这项工作变得更困难。虚函数的特点使得程序使用哪一个函数是不能再编译时确定的,因为编译器不知道用户将选择哪一种类型的对象。所以,编译器必须生成能够在程序运行时选择正确的虚函数的代码,这被称为动态联编(dynamic binding),又称为晚期联编(late binding)。
虚函数
定义
虚函数是实现C++多态性的重要一环。在C++继承中,如果一个基类的派生类需要重载基类的成员函数,在基类中将这个预期在派生类中要重载的成员函数定义为虚函数,就可以做到这一点。
#include<iostream>
class A
{
public:
virtual void print (void){std::cout << "This is A\n";};
A (){};
virtual ~A (){};
};
class a : public A
{
public:
void print (void){std::cout << "This is a\n";};
a (){};
virtual ~a (){};
};
int main (void)
{
A *p = new A;
p->print();
p = new a;
p-