C++面向对象编程 继承和派生

                                                C++面向对象编程

继承是保持原有类的基础上进行扩展


继承关系具有双重关系作用:

          1)作为类的构造机制, 继承通过扩充, 组合现有的类来构造新的类
    
           2) 作为类型的构造机制, 如归B继承A则所有要求对象A类型的地方也可以接受B类型的方法

派生类的概念
                   

                   1)有一个基类派生的继承称作是单继承
   
                    2) 从多个基类派生的继承称作是多继承


         1、 单继承
  
          class   派生类名:继承方式 类名
          {
 
                           派生类新定义成员;
         };

        eg .
     
        class A 
       {
     
         }
        class  B: public A 
       {
               //类B新添加的成员函数
         }

        2、多继承
       class 派生类名:继承方式1  , 继承方式2 基类名2 ,.....
       {
             //派生类新定义的方式
       };
       
        eg.
          class A 
          {
       
                       //类的成员
            }
            class  B
           {
                      //类的成员
            };

           class  C: public A , private B
           {
                  //类C新添加的成员
           };
 
            派生类的生成过程:
 
                                  1)吸收 基类成员

                                   2)改造基类成员
                                  
                                    3)添加新的成员
 
                    继承方式  : 
                                            1)公有继承
                                            2) 保护继承 
                                            3) 私有继承
   公有类继承:

#include<iostream>
using namespace std;

class A
{
    public :
      int x;
};
class B :public A
{
    private:
       int y;
    protected:
       int z;
    public:
        int m;
        void setvalue(int a, int b, int c, int d)
        {
            x = a;     //继承在类下因此B中依然有共有成员x
            y = b;     //这里是说的是公有继承
            z = c;
            m = d;
        }
        void disp()
        {
            cout<<"y = "<<y<<endl;
            cout<<"x = "<<x<<endl;
        }
};
int main()
{

    B obj;
    obj.setvalue(1,2,3,4);
    obj.disp();
    return 0;
}


          私有继承:
#include<iostream>
using namespace std;

class A
{
    private:
       int x;
    public :
      void  setx(int i){ x = i;}
      void dispx(){cout<<"x = "<<x<<endl;}
};
class B: private A
{
    //私有继承 派生类的对象可以直接访问它们, 但是在类外部通过派生类的对象无法访问它们

    private:
        int y;
    protected:
        int z;
    public:
        int m;
        void setvalue(int a, int b, int c, int d)
        {
            setx(a)  ;//继承上面的类,下面可以进行直接调用
            y = b;    //private protect 在类的内部是可以直接调用的
            z = c;
            m = d;
        }
        void disp()
        {
            dispx();//直接调用
            cout<<"y = "<<y<<endl;
            cout<<"z = "<<z<<endl;
        }
};
int main()
{
    B obj;
    obj.setvalue(1,2,3,4);
    obj.disp();
    obj.m = 4;  //直接对共有数据成员进行赋值操作
    cout<<"m = "<<obj.m<<endl;
    return 0;
}


            
wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值