C++学习日志(2)——继承

基类&派生类

  • 当类B继承了类A,类A为基类(父类),类B为派生类(子类)
  • 一个类可以派生自多个类
  • 派生类可以访问基类的所有非私有成员,若基类的成员不想被派生类访问,则应把成员设置为private
class Shape     // 基类
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:        //可以被派生类访问
      int width;
      int height;
};
 
class Rectangle: public Shape    // 派生类
{
   public:
      int getArea()
      { 
         return (width * height);     //派生类可以访问基类非私有成员
      }
};

访问权限

访问publicprotectedprivate
本类,友元yesyesyes
派生类yesyesno
外部的类yesnono

一个派生类继承了所有的基类方法,但下列情况除外:

  • 基类的构造函数,析构函数,拷贝构造函数
  • 基类的重载运算符
  • 基类的友元函数

不能够在子类的成员函数体中调用基类的构造函数来为成员变量进行初始化,但可以将基类的构造函数放在初始化列表上

// 基类
class Shape 
{
   public:
      Shape(int w,int h)
      {
        width=w;
        height=h;
      }
   protected:
      int width;
      int height;
};
 
// 派生类
class Rectangle: public Shape
{
   public:
      Rectangle(int a,int b):Shape(a,b)    //正确,基类构造函数可以放在初始化列表上
      {
        
      }
};

继承类型

  • 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有保护成员来访问。
  • 保护继承(protected): 当一个类派生自保护基类时,基类的公有保护成员将成为派生类的保护成员。
  • 私有继承(private):当一个类派生自私有基类时,基类的公有保护成员将成为派生类的私有成员。
父类中类型publicprotectedprivate
public继承--子类中类型publicprotectedprivate
protected继承--子类中类型protectedprotectedprivate
private继承--子类中类型privateprivateprivate

若不声明继承类型,则默认为private继承


多继承

一个子类可以有多个父类,每个父类要声明继承类型

// 基类 Shape
class Shape 
{
   public:
      void setWidth(int w)
      {
         width = w;
      }
      void setHeight(int h)
      {
         height = h;
      }
   protected:
      int width;
      int height;
};
 
// 基类 PaintCost
class PaintCost 
{
   public:
      int getCost(int area)
      {
         return area * 70;
      }
};
 
// 派生类
class Rectangle: public Shape, public PaintCost    //继承自两个父类
{
   public:
      int getArea()
      { 
         return (width * height); 
      }
};
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值