VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 980|回复: 30

《实用C++》第39课 类的继承与派生

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-5-19 00:15:25 | 显示全部楼层 |阅读模式
1、为什么要进行类的继承与派生?
关于这个话题其实在之前的课程中有给大家介绍过,就在《实用C++》第29课 面向对象的程序设计的第⑤个知识点:http://www.cctry.com/thread-289448-1-1.html
继承与派生是C++编程过程中经常用到的一个非常重要的功能。可以复用以前开发好的功能,站在巨人的肩膀上,节省时间,提高开发效率。不用重复造轮子了。这就是C++面向对象编程中的继承与派生。
例如,咱们之前定义的学生类 CStudent,里面包含了一些普通学生的信息:姓名、学号、性别、年龄。那么接下来呢,我要定义一个小学生的类,又要定义一个中学生的类,还要定义一个大学生的类。不管是小学生、中学生还是大学生,肯定也包含学生的姓名、学号、性别、年龄等基本信息,如果都分别新定义一个类的话,可不可以?答案是当然可以的。但是这样跟之前的学生类 CStudent 貌似有点重复,同样的代码写了很多次。所以,我们可以通过C++中的继承的机制来解决这个问题。

2、继承举例:
既然 CStudent 学生类的信息可以作为所有学生的基础信息,任何一个学生都包含姓名、学号、性别、年龄等基本信息。那么我们在定义小学生、中学生或者大学生的类的时候就可以用 CStudent 作为父类进行派生子类,例如:
  1. #include "Student.h"
  2. class CXiaoStudent : public CStudent
  3. {
  4. public:
  5.     int yuwen_score;
  6.     int shuxue_score;
  7.     int english_score;
  8. };

  9. class CZhongStudent : public CXiaoStudent
  10. {
  11. public:
  12.     int wuli_score;
  13.     int huaxue_score;
  14. };
复制代码


其中 CXiaoStudent、CZhongStudent 是新定义的小学生、中学生的类名字,: public 之后跟着的是他的父类,也就是从哪个类继承过来的,咱们之前的类定义都是留空,这里面应该设计到继承关系,所以要加上,不然不知道从哪里继承过来的。这里面的 public 是指的继承方式,即:父类中的成员在子类中的继承方式,一般也包含三种:public公有继承、private私有继承、protedted受保护继承。这个咱们下个知识点讨论,这里面先举个小例子,看看怎么用:
  1. CZhongStudent zhong_1;
  2. zhong_1.wuli_score = 90; //调用本类的成员变量
  3. zhong_1.yuwen_score = 100; //调用父类的成员变量
  4. zhong_1.age = 15; //调用爷爷类的成员变量
复制代码


以上调用都是可以的,怎么样,大家看到了继承的方便之处了吧?

3、继承的方式:
①、public公有继承:
父类的公有成员和受保护成员在子类中保持原有的访问属性,其私有成员仍为父类私有,在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;
②、private私有继承:
父类的公有成员和受保护的成员在子类中变成了私有成员,其私有成员仍为父类私有, 在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;
③、protected受保护继承:
父类的公有成员和受保护的成员在子类中变成了受保护成员,其私有成员仍为父类私有, 在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;

示例代码如下,具体详细敲代码过程及讲解详见视频教程!
  1. #include "Student.h"
  2. class CXiaoStudent : public CStudent
  3. {
  4. public:
  5.     int yuwen_score;
  6.     int shuxue_score;
  7.     int english_score;

  8. private:
  9.     int flag_private;

  10. protected:
  11.     int flag_protected;
  12. };

  13. class CZhongStudent : public CXiaoStudent
  14. {
  15. public:
  16.     int wuli_score;
  17.     int huaxue_score;

  18. public:
  19.     int get_flag_1()
  20.     {
  21.         //return flag_private;
  22.         return flag_protected;
  23.     }
  24. };
复制代码


备注:现实编程过程中 public 公有继承是使用最广泛的,其他两种使用的不是很多。所以 public 公有继承这块大家要熟练掌握。
总结为一张图:
《实用C++》第39课 类的继承与派生

4、小作业:
按照继承的规则,既然父类中的private私有成员不能在子类中直接使用,那么有没有什么办法能解决这个问题呢?让子类可以直接或者间接的使用父类中的private私有成员呢?大家想想?
比如上面代码中的 CZhongStudent 类的 get_flag_1 函数,如何能获取到 flag_private 的值呢?大家课后想一想,并且自己实现一下试试!

第39课免费试看,下载地址回复后可见:
游客,如果您要查看本帖隐藏内容请回复

#######################################################
获得所有教学视频、课件、源代码以及售后答疑详见:
《实用C++》:http://www.cctry.com/thread-275996-1-1.html
VC驿站官方客服QQ:8260671

#######################################################

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

98_avatar_middle
online_member tomok 发表于 2018-5-19 09:20:01 | 显示全部楼层
谢谢分享


发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

74_avatar_middle
online_vip08 wssfcn 发表于 2018-5-19 09:45:25 | 显示全部楼层
看看         

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

62_avatar_middle
online_vip08 longquan 发表于 2018-5-19 10:28:05 | 显示全部楼层
有更新了 ,看看《实用C++》第39课 类的继承与派生

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

78_avatar_middle
online_member csa 发表于 2018-5-19 16:04:25 | 显示全部楼层
强啊。。又出新课

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

80_avatar_middle
online_member zp521 发表于 2018-5-20 08:53:17 | 显示全部楼层
坚持学习!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

82_avatar_middle
online_member DetectiveY 发表于 2018-5-20 09:21:06 | 显示全部楼层
谢谢分享,继续学习

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

94_avatar_middle
online_vip08 Mtong 发表于 2018-5-20 22:58:11 | 显示全部楼层
谢谢分享,继续学习

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

79_avatar_middle
online_member 595084969 发表于 2018-5-23 14:36:38 | 显示全部楼层
支持支持支持支持支持支持

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

95_avatar_middle
online_member zjh2008 发表于 2018-5-25 00:02:03 | 显示全部楼层

强啊。。又出新课

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

56_avatar_middle
online_member coffeemlx 发表于 2018-5-27 17:05:33 | 显示全部楼层
强啊。。又出新课

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

85_avatar_middle
online_member 99099800 发表于 2018-5-28 08:18:45 | 显示全部楼层
感谢分享,学习一下。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

18_avatar_middle
online_vip 听雨声等你笑 发表于 2018-5-28 22:00:11 | 显示全部楼层
学习一下,感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

44_avatar_middle
online_member a281288098 发表于 2018-5-29 09:20:50 | 显示全部楼层
多谢楼主费心录制.

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

06_avatar_middle
online_vip 1938537171 发表于 2018-5-29 16:32:41 | 显示全部楼层
我爱学习 学习爱我

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

96_avatar_middle
online_member Jer808 发表于 2018-5-29 20:16:53 | 显示全部楼层
学习学习~~~~

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

82_avatar_middle
online_member ha521ha 发表于 2018-5-31 07:45:39 | 显示全部楼层
很想学习c++

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

58_avatar_middle
online_member AxiaoA 发表于 2018-5-31 19:32:16 | 显示全部楼层
谢谢分享!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
online_member Sam599 发表于 2018-6-1 11:34:26 | 显示全部楼层
感谢楼主分享,楼主辛苦了!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

75_avatar_middle
online_member Sam599 发表于 2018-6-1 11:35:18 | 显示全部楼层
感谢楼主分享,楼主辛苦了!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-6-24 17:07

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表