• 虚函数总结实例


    #include <iostream>
    using namespace std ;
    class animal  
    {  
    public:  
        animal()
        {
            cout <<"animal构造函数"<<endl;
        }
           void sleep()  
           {  
                  cout<<"animal sleep"<<endl;  
           }  
          virtual   void breathe()  
           {  
                  cout<<"animal breathe"<<endl;  
           }  
           ~animal ()
           {
               cout <<"animal析构函数"<<endl;
           }
    };  
    class fish:public animal  
    {  
    public: 
        fish ()
        {
              cout <<"fish构造函数"<<endl;
        }
           void sleep()  
           {  
                  cout<<"fish sleep"<<endl;  
           }  
          void breathe()  
           {  
                  cout<<"fish bubble"<<endl;  
           }  
              ~fish ()
           {
               cout <<"fish析构函数"<<endl;
           }
    };  
    void main()  
    {  
           fish fh;  
    
           animal *pAn=&fh; // 隐式类型转换 指针不调用构造函数 一旦某个函数在基类中声明为virtual,
                            //那么在所有的派生类中该函数都是virtual,而不需要再显式地声明为virtual。
           /*若是animal类里面的breathe() 不是虚函数则,打印的是animal breathe*/
           /*若是animal类里面的breathe() 是虚函数则,打印的是fish bubble*/
           /*若是animal类里面的sleep() 不是虚函数则,fish类继承了animal,sleep()为虚函数.则打印animal sleep*/
            pAn->breathe();  //fish bubble
            pAn ->sleep();//animal sleep
    
            animal *ani= new fish;//因为有new创建了一个fish对象,因此打印构造函数。
            ani->breathe() ;//fish bubble
            ani->sleep ();  //animal sleep
    
        fish *fh1 =new fish();
        fh1->sleep ();//fish sleep
        animal *ani1=(animal*)fh1;
        ani1 ->breathe ();  //fish bubble
        ani1 ->sleep();    //animal sleep
    
        ((fish*)(ani1))->breathe ();//fish bubble
        ((fish*)(ani1))->sleep  ();////fish sleep
        ani ->sleep ();    //animal sleep
    
        animal *ani2=new animal ();
        ani2->breathe ();//animal breathe
        ani2->sleep ();//animal sleep
    
        fish *fh2=(fish*)ani2;
    
        fh2->breathe ();//animal breathe  虚子函数没有变
        fh2->sleep ();//fish sleep  
    
        ((animal*)(fh2))->breathe ();//animal breathe
        ((animal*)(fh2))->sleep ();//animal sleep
    
                system("pause");
    }

    但愿人长久 千里共婵娟
  • 相关阅读:
    数字式频率计数器的选择
    频率计数器简介
    地铁时钟系统介绍
    铷原子时钟基准介绍
    GPS网络校时服务器厂家的选择?
    低频数字式相位测试仪的原理与使用
    如何选择一套网络时钟系统?
    GNSS卫星信号转发器应用与原理
    GPS卫星原子钟和原子频标介绍
    如何检定铷原子频率标准?
  • 原文地址:https://www.cnblogs.com/hellcats/p/4924468.html
Copyright © 2020-2023  润新知