虚函数的各种情况
#include<iostream> using namespace std; class Base { public: virtual void Show()const{cout<<"调用Base::Show()"<<endl;} }; class Derived:public Base { public: void Show()const{cout<<"调用Derived::Show()"<<endl;} }; void Refers1(const Base &obj) { obj.Show(); } void Refers2(const Base *obj) { obj->Show(); } int main() { Base obj1; Base *p1; Derived obj2; p1=&obj2; obj1=obj2; obj1.Show();/*与virtual,引用无关,"调用Base::Show()"。*/ obj2.Show();/*与virtual无关,"调用Derived::Show()"*/ Refers2(p1); /*1.没有virtual时是不管void Refers1(const Base &obj)中有没有用引用都是"调用Base::Show()", 2.当有virtual时,没有引用时"调用Base::Show()",有引用"调用Derived::Show()"。*/ Refers1(obj1);/*与virtual,引用无关,"调用Base::Show()"。*/ Refers1(obj2);/*1.没有virtual时"调用Base::Show()",有virtual时"调用Derived::Show()"。*/ return 0; }