82虚函数 (++ C+十 4+十 ++ 例2:用多态性解决例1中的问题 #include<iostream. h> class base public virtual void print(){cout<“base”;}};∥定义了虚函数 P的/n、 public base{/定义派生类 class first void print(){cout<<“frst”;}};∥重新定义 print(() class second: public base{/定义派生类 public void print(){cout<<" second";}};∥重新定义 print()
§8.2 虚函数 例2:用多态性解决例1中的问题 #include<iostream.h> class base { public: virtual void print( ) { cout << “base ”; } }; //定义了虚函数 class first:public base { //定义派生类 public: void print( ) { cout << “ first ”; } }; //重新定义print( ) class second:public base { //定义派生类 public: void print( ) { cout << " second "; } }; //重新定义print( )
82虚函数 (++ C+十 4+十 ++ void main(i base ob1,*p;∥定义基类的对象 first ob2;定义派生类的对象 second ob3;定义派生类的对象 p=&obl;/p指向基类对象obl p> print(;∥调基类成员函数 p=&ob2;∥1p指向子类对象ob2 p-> print();∥动态联编,调子类成员函数 p=&ob3;∥p指向子类对象ob3 p-> print();∥动态联编,调子类成员函数 结果:base first second
§8.2 虚函数 void main( ) { base ob1, *p; //定义基类的对象 first ob2; //定义派生类的对象 second ob3; //定义派生类的对象 p= &ob1; //p 指向基类对象 ob1 p->print( ); // 调基类成员函数 p= &ob2; // p 指向子类对象 ob2 p->print( ); // 动态联编, 调子类成员函数 p= &ob3; // p 指向子类对象 ob3 p->print( ); // 动态联编, 调子类成员函数 } 结果:base first second
82虚函数 例2的相关内容总结 1.基类中的虚函数是由 virtual定义的 virtual void printo) 2.在定义了虚函数之后,只要定义一个基类的指针,就可 以调用子类的函数 p=&ob2;∥p指向子类对象ob2 p-> print();∥/动态联编,调子类成员函数 3.要实现动态联编,子类中的函数必需与基类的函数形式 致,若在子类中对虚函数的形式进行了改变,则子类中 的函数将失去多态性(详细见下例)
§8.2 虚函数 例2的相关内容总结 1. 基类中的虚函数是由virtual 定义的: virtual void print( ); 2. 在定义了虚函数之后, 只要定义一个基类的指针,就可 以调用子类的函数: p= &ob2; // p 指向子类对象 ob2 p->print( ); // 动态联编, 调子类成员函数 3. 要实现动态联编,子类中的函数必需与基类的函数形式 一致,若在子类中对虚函数的形式进行了改变,则子类中 的函数将失去多态性(详细见下例)
毫看2函数 (++ C+十 4+十 ++ 例3.虚函数重载讨论 #includesiostream. h> class base public virtual void fl(){cout<<" fl function of base n";}∥定义虚函数 virtual void fa2(){cout<"f2 function of base n";}/定义虚函数 void B30 cout<< "f3 function of base n") ∥定义一般虚函数 } class derive: public base i public void fl(i cout<< "fl function of derive n 重新定义虚函数 void f2(intx){cout<<"f2 function of derive n";}∥重新定义虚函数, ∥)由于形式改变,失去 ∥函数功能 void fe3(){cout<<"f3 function of derive n",}∥重新定义一般函数
§8.2 虚函数 例3. 虚函数重载讨论 #include<iostream.h> class base { public: virtual void f1( ) { cout << "f1 function of base \n "; } //定义虚函数 virtual void f2( ) { cout << " f2 function of base \n "; } //定义虚函数 void f3( ) { cout << " f3 function of base \n "; } //定义一般虚函数 }; class derive: public base { public: void f1( ) { cout << " f1 function of derive \n "; } //重新定义虚函数 void f2(int x ) {cout << " f2 function of derive \n "; } //重新定义虚函数, //由于形式改变,失去 //虚函数功能 void f3( ) { cout << " f3 function of derive \n "; } //重新定义一般函数 };