C++知识要点整理11:继承与派生(1)

1.继承

(1)公用继承
    基类的公有成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。
(2)私有继承
    基类的公有成员和保护成员在派生类中成了私有成员。其私有成员仍为基类私有。
(3)受保护的继承

   基类的公有成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有(保护成员的意思是:不能被外界引用,但可以      被派生类的成员引用)。

在基类的访问属性         继承方式                                在派生类中的访问属性
private(私有)public(公用)不可访问
private(私有)private(私有)不可访问
private(私有)protected(保护)不可访问
public(公有)public(公用)public(公用)
public(公有)private(私有)private(私有)
public(公有)protected(保护)protected(保护)
protected(保护)public(公用)protected(保护)
protected(保护)private(私有)private(私有)
protected(保护)protected(保护)protected(保护)

2.派生类的构造函数

(1)简单的派生类的构造函数
  派生类构造函数一般形式为:
  派生类构造函数名(总参数表):基类构造函数名(参数表)
       {派生类中新增数据成员初始化语句}

例如:
      Student1(int n,string nam,char s,int a,string sd):Student(n,nam,s)
      {
         age =a;
         addr=ad;
        }
     其中Student1公用继承自Student,Student1中有age和addr两个私有数据成员,Student中有num,name,sex,三个私有数据成员。我们可以看到基类构造函数参数表列只有参数名而没有参数类型,因为在这里不是定义基类构造函数,而是调用基类构造函数,因此这些参数是实参而不是形参。
(2)有子对象的派生类的构造函数
     类中的数据成员中还可以包含类对象,如可以在声明一个Student1类时包含这样的数据成员:Student s1;这时,s1就是类对象的内嵌对象,称为子对象。
    此时定义派生类构造函数的一般形式为:
    派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)
      {派生类中新增数据成员初始化语句}

    执行顺序是:首先调用基类构造函数,对基类数据成员初始化;然后调用子对象构造函数,对子对象数据成员初始化;最后执行派生类构造函数本身,对派生类数据成员初始化。
(3)多层派生时的构造函数
     不要列出每一层派生类的构造函数,只需写出其上一层派生类(即它的直接基类)的构造函数即可。

3.使用派生类构造函数时的两种特殊形式:

(1)当不需要对派生类新增的成员进行任何初始操作时,派生类构造函数的函数体可以为空,即构造函数是空函数。例如:
       Student1(int n,string nam,int n1,string nam1):Student(n,nam),monitor(n1,nam1){}
(2)如果在基类中没有定义构造函数,或定义了没有参数的构造函数,那么,在定义派生类构造函数时可以不写基类构造函数。因    为此时派生类构造函数没有向基类构造函数传递参数的任务。在调用派生类构造函数时,系统会自动首先调用基类的默认构造函      数。

4.派生类的析构函数

    调用顺序:先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值