6.用虚函数实现动态连接在编译期间,C++编译器根据程序传递给函数的参数或者函数返回类型来决定程序使用那个函数,然后编译器用正确的的函数替换每次启动。这种基于编译器的替换被称为静态连接,他们在程序运行之前执行。另一方面,当程序执行多态性时,替换是在程序执行期进行的,这种运行期间替换被称为动态连接。如下例子: class A{ public: virtual void f(){cout << "A::f" << endl;}; }; class B:public A{ public: virtual void f(){cout << "B::f" << endl;}; }; class C:public A{ public: virtual void f(){cout << "C::f" << endl;}; }; void test(A *a){ a->f(); }; int main(int argc, char* argv[]) { B *b=new B; C *c=new C; char choice; do{ cout<<"type B for class B,C for class C:"<<endl; cin>>choice; if(choice==''b'') test(b); else if(choice==''c'') test(c); }while(1); cout<<endl<<endl; return 0; } 在上面的例子中,如果把类A,B,C中的virtual修饰符去掉,看看打印的结果,然后再看下面一个例子想想两者的联系。如果把B和C中的virtual修饰符去掉,又会怎样,结果和没有去掉一样。
C++中的虚函数和虚函数表(3)
内容版权声明:除非注明,否则皆为本站原创文章。