1.1确认具体对象的过程叫关联(binding),在这里指把一个函数与类对象捆绑在一起,建立关联。
1.2什么是静态关联?
函数重载和通过对象名调用的虚函数,在编译时即可确定其调用的虚函数属于哪一个类,其过程称为静态关联,由于是在运行前关联的,所以又叫早期关联。
1.3什么是动态关联?
在运行时,基类指针变量指向了某个类对象,然后通过这个基类指针去调用虚函数。由于是在运行时把虚函数与对象“绑定”在一起, 因此,此过程称为动态关联。由于动态关联是在编译后运行阶段进行的,所以又称为滞后关联。
1.4使用虚函数时的注意点:
A.只能用virtual声明类的成员函数,使他成为虚函数,而不能将类外的普通函数声明为虚函数。
B.一个成员函数在被声明为虚函数后,在同一类族中的类就不能定义一个非virtual的但是与该虚函数具有相同参数和返回值类型的函数。
1.5怎么判断是否把一个成员函数声明为虚函数?
A.首先看成员函数所在的类是否会成为基类。然后看成员函数在类的继承后有无可能被改进功能,如果希望改变其功能的,一般把它声明为虚函数。
B.如果成员函数在类被继承后不被修改,或派生类用不到该函数,则不要把它声明为虚函数。
C.应该考虑对成员函数的调用是通过对象名还是通过基类指针或引用来访问,如果通过基类指针或引用来访问的,应该考虑用虚函数。
D.有时,在定义虚函数时,不定义其函数体,即函数体是空的。
1.6使用虚函数,系统有一定的开销,但一个类有虚函数时,编译系统会为该类创建一个虚函数表,它是一个指针数组,存放每个虚函数的入口地址。