C++语言默认采用的是静态绑定。
上述打印的结果: AAAAAAAAAAAA AAAAAAAAAAAA 因为动态绑定的执行效率更低,c++默认采用静态绑定。如果需要动态绑定,则需要特别声明,采用virtual标识。 1. 静态绑定:根据编译时申明的变量类型,来决定调用的是哪个类型的函数; 2. 动态绑定:根据运行时实际赋给变量的类型,来决定调用的是父类或子类的函数。
如果将Person类的func函数加上virtual修饰,让其成为虚函数。
上述打印的结果: AAAAAAAAAAAA BBBBBBBBBBBB
只有通过指针或引用来访问对象的虚函数时,才能够进行动态绑定。 故上述的 Person person = child; person.func(); 调用的函数还是Person类的func,因为没有动态绑定。
-------------------------------------------- 再举一例
|