c++基础(继承与派生)

  1. 保持已有类的特性而构造新类的过程称为继承,在已有类的基础上新增自己的特性而产生新类的过程称为派生,被继承的已有类称为基类(或父类),派生出的新类称为派生类。
  2. 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。
    派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
    通过派生类的对象只能访问基类的public成员。
  3. 实例举例

    class Point  //基类Point类的声明

    {public:  //公有函数成员

      void InitP(float xx=0, float yy=0)

        {X=xx;Y=yy;}

      void Move(float xOff, float yOff)

        {X+=xOff;Y+=yOff;}

      float GetX() {return X;}

      float GetY() {return Y;}

      private:  //私有数据成员

      float X,Y;

    };

    class Rectangle: public Point //派生类声明

    {

    public:  //新增公有函数成员

      void InitR(float x, float y,float w, float h)

      {InitP(x,y);W=w;H=h;}//调用基类公有成员函数

      float GetH() {return H;}

      float GetW() {return W;}

      private:  //新增私有数据成员

      float W,H;

    };

    #include<iostream>

    #include<cmath>

    using namecpace std;

    int main()

    {  Rectangle rect;

      rect.InitR(2,3,20,10);

        //通过派生类对象访问基类公有成员

      rect.Move(3,2); 

      cout<<rect.GetX()<<','

          <<rect.GetY()<<','

      <<rect.GetH()<<','

      <<rect.GetW()<<endl;

      return 0;

    }

  4. 私有继承
    1. 基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问。
    2. 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
    3. 通过派生类的对象不能直接访问基类中的任何成员。
    4. 私有继承举例

      class Rectangle: private Point  //派生类声明

      {public:  //新增外部接口

        void InitR(float x, float y,float w, float h)

        {InitP(x,y);W=w;H=h;}  //访问基类公有成员

        void Move(float xOff, float yOff) {Point::Move(xOff,yOff);}

        float GetX() {return Point::GetX();}

        float GetY() {return Point::GetY();}

        float GetH() {return H;}

        float GetW() {return W;}

      private:  //新增私有数据

        float W,H;

      };

      #include<iostream>

      #include<cmath>

      using namecpace std;

      int main()

      {  //通过派生类对象只能访问本类成员

          Rectangle rect;

        rect.InitR(2,3,20,10);

        rect.Move(3,2);

        cout<<rect.GetX()<<',' <<rect.GetY()<<','

        <<rect.GetH()<<','<<rect.GetW()<<endl;

        return 0;

      }

  5. 保护继承
    基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。
    派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。
    通过派生类的对象不能直接访问基类中的任何成员
    对建立其所在类对象的模块来说,它与 private 成员的性质相同。
    对于其派生类来说,它与 public 成员的性质相同。
    保护继承举例:

    class A{

         protected:

                        int x;

    }

    int main()

    {

          A a;

          a.x=5;   //错误

    }

    class A {

         protected:

                        int x;

    }

    class B: public A{

         public:

              voidFunction();

    };

    void B::Function()

    {

          x=5;   //正确

    }

 

  1.  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值