美文网首页
继承,多态,虚函数

继承,多态,虚函数

作者: 萌面大叔2 | 来源:发表于2016-11-11 09:35 被阅读0次

    1.保持已有类的特性而构造新类的过程称为继承。
    2.在已有类的基础上新增自己的特性而产生新类的过程称为派生。
    3.被继承的已有类称为基类(或父类)。
    4.派生出的新类称为派生类(或子类)。


    概念及工作方式

    继承的目的:实现代码重用。

    派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。

    继承(代码重用 )

    #include <iostream>
    using namespace std;
    class Shop
    {
    public:
        int m_a;
        void saleDailyGoods()
        {
            m_a=40;
            cout<<"卖日用品"<<m_a<<endl;
            return ;
        }   
    };
    class Market:public Shop//继承:代码重用 
    {
        public:
            void saleFood()
            {
                m_a=10;
                cout<<"食品"<<m_a<<endl;
                return;
            }   
    };
    class Supermarket:public Market
    {
        public: 
            void pay()
            {
                cout<<"代缴水费"<<m_a<<endl;
                return;
            }
    }; 
     
    int main()
    {
        Supermarket m;
        m.saleDailyGoods();
        m.saleFood();
        m.pay();
        return 0;
    }
    运行结果:
    卖日用品40
    食品10
    代缴水费10
    

    ————————————————————————————————————————————————————————————————————————————

    继承的访问权限

         class Base�    
    {�     
    public:�      
      int m1;�     
    protected:�      
      int m2;�     
    private:�      
      int m3;�    
    };�
    class PrivateClass:private Base //私有继承�    
    {�     
    public:�      
      void test()�      
      {�       
        ml=1; //ok:将m1据为private�       
        m2=2; //ok:将m2据为private�       
        m3=3; //不可访问�      
      }�    
    };�
                     
    class DerivedFromPri:public PrivateClass�    
    { �     
    public:�      
      void test()�      
      {�       
        m1=1; //不可访问基类的私有成员�       
        m2=2; //不可访问�       
        m3=3; //不可访问�      
      }�    
    };
    
    
    
        class ProtectedClass:protected Base //保护继承�    
    {�     
    public:�      
      void test()�      
        {�       
            m1=1;    //ml据为protected�       
            m2=2; //m2据为protected�       
            m3=3; //不可访问�      
        }�    
    };�    
    class DerivedFromPro:public ProtectedClass�    
    {�     
    public: �      
      void test()�      
        {�       
            m1=1; //ml 仍为protected�       
            m2=2; //m2 仍为protected�       
            m3=3; //不可访问�      
        }�    
    };
    
    
    #include <iostream>
    using namespace std;
    class B0
    {
    public:
        void display()
        {
            cout<<"B0 display"<<endl;
        }
    };
    class B1:public B0//可以调用B0 
    {
    public:
        void display()
        {
            cout<<"B1 display"<<endl;
        }
    };
    class D1:public B1//可以调用B0,B1 
    {
    public:
        void display()
        {
            cout<<"D1 display"<<endl;
        }
    };
    int main()
    {
        B0 b0;
        b0.display();
        B1 b1;
        b1.display();
        D1 d1;
        d1.B0::display();
        d1.B1::display();
        d1.display();
        return 0;
    }
    运行结果:
    B0 display
    B1 display
    B0 display
    B1 display
    B1 display
    
    

    多态(基类指针指向子类对象 )

    #include <iostream>
    using namespace std;
    class B0
    {
    public:
        void display()
        {
            cout<<"B0 display"<<endl;
        }
    };
    class B1:public B0//可以调用B0 
    {
    public:
        void display()
        {
            cout<<"B1 display"<<endl;
        }
    };
    class D1:public B1//可以调用B0,B1 
    {
    public:
        void display()
        {
            cout<<"D1 display"<<endl;
        }
    };
    
    int main()
    {
        B0 b0,*p0;//多态:基类指针指向子类对象 
        p0=&b0;
        p0->display();
        B1 b1;
        p0=&b1;
        p0->display();  
        D1 d1;
        p0=&d1;
        p0->display();
        return 0;
    }
    运行结果:
    B0 display
    B0 display
    B0 display
    
    

    纯虚函数(virtual)

    #include <iostream>
    using namespace std;
    class B0
    {
    public:
        virtual void display()=0;//纯虚函数,下面的函数一定要重写
    };
    class B1:public B0//可以调用B0 
    {
    public:
        void display()
        {
            cout<<"B1 display"<<endl;
        }
    };
    
    int main()
    {
        B0 *p0;
        B1 b1;
        p0=&b1;
        p0->display();  
    }
    
    
    
    

    多继承(不建议使用)

    #include <iostream>
    using namespace std;
    class Father
    {
    public:
        void money ()
        {
            cout<<"有钱"<<endl;
        }
    };
    class Mother
    {
    public:
        void face ()
        {
            cout<<"漂亮,高挑"<<endl;
        }
    };
    class Son:public Father,public Mother//多继承
    {
    
    };
    
    int main()
    {
        Son s;
        s.money();
        s.face();
    }
    运行结果:
    有钱
    漂亮,高挑
    

    虚函数 ,用在菱形继承结构

    #include <iostream>
    using namespace std;
    class Person
    {
    public:
        int id;
    };
    class  Father:virtual public Person//虚函数 ,用在菱形继承结构 
    {
    public:
        void money ()
        {
            cout<<"有钱"<<endl;
        }
    };
    class Mother:virtual public Person
    {
    public:
        void face ()
        {
            cout<<"漂亮,高挑"<<id<<endl;
        }
    };
    class Son:public Father,public Mother//多重继承 
    {
    public:
        void aa()
        {
            cout<<id<<endl;
        } 
    
    };
    
    int main()
    {
        Son s;
        s.money();
        s.id=3;
        Person*p=&s;
        s.aa();
        Mother m;
        m.id=5;
        m.face();
    
    }
    运行结果:
    有钱
    3
    漂亮,高挑5
    
    

    相关文章

      网友评论

          本文标题:继承,多态,虚函数

          本文链接:https://www.haomeiwen.com/subject/lbxfpttx.html