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

继承,多态,虚函数

作者: 萌面大叔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

相关文章

  • 周记二

    周一:今天学了继承和多态,继承有public继承、protected继承、private继承,多态和虚函数一对,抽...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • 2017 09 20

    结合9.20日所学的继承,多重继承及指针等相关知识,对多态及虚函数进行学习,主要练习为图形类的多态、虚函数的实际应...

  • C++语言-多态,纯虚函数,模版函数

    1、虚函数、纯虚函数 需要注意的是,纯虚函数子类是必须继承的,虚函数不是不必须继承的。 2、多态 在C++中默认关...

  • 继承,多态,虚函数

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

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • 深入研究C++多态(虚函数和虚继承)

    面向对象的三大特性是封装、继承和多态。多态是非常重要的一个特性,C++多态基于虚函数和虚继承实现,本文将完整挖掘C...

  • 虚继承和虚函数

    虚继承和虚函数 虚继承和虚函数是毫不相关的两个概念,但是在实现上又有所类似;虚函数是C++中实现多态的一个重要手段...

  • 查漏补缺

    C++虚函数: 多态: 静态多态(重载)、动态多态(虚函数) 虚函数 虚函数表:编译器为每个类创建了一个虚函数表...

  • C++学习三

    一、运算符重载 二、继承 1、基本 2、多继承、二义性 3、属性二义性 4、虚基类(虚继承) 三、多态(虚函数) ...

网友评论

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

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