继承,多态,虚函数

2016-11-11  本文已影响0人  萌面大叔2

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

上一篇 下一篇

猜你喜欢

热点阅读