#include <iostream>
using namespace std; 【程序编程相关:Java 程序编码规范】 【推荐阅读:JDK1.5新特性介绍】 【扩展信息:串口基础类库(WIN32)ver 0.2】class base
{ int a; public: virtual void fun1() {cout<<"base::fun1()"<<endl;} virtual void fun2() {cout<<"base::fun2()"<<endl;} virtual void fun3() {cout<<"base::fun3()"<<endl;} };class a:public base
{ int a; public: void fun1() {cout<<"a::fun1()"<<endl;} void fun2() {cout<<"a::fun2()"<<endl;} };void foo (base& obj)
{ obj.fun1(); obj.fun2(); obj.fun3(); }int main()
{ base b; a a; foo(b); foo(a); }运行结果为: base::fun1() base::fun2() base::fun3() a::fun1() a::fun2() base::fun3()仅通过基类的接口,程序调用了正确的函数,它就好像知道我们输入的对象的类型一样!
那么,编译器是如何知道正确代码的位置的呢?其实,编译器在编译时并不知道要调用的函数体的正确位置,但它插入了一段能找到正确的函数体的代码.... 下一页