Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73989
  • 博文数量: 43
  • 博客积分: 605
  • 博客等级: 中士
  • 技术积分: 355
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-26 18:11
文章分类

全部博文(43)

文章存档

2012年(43)

分类: C/C++

2012-08-13 17:02:04

转自:30天掌握C++精髓

点击(此处)折叠或打开

  1. //程序作者:管宁
  2. //站点:www.cndev-lab.com
  3. //所有稿件均有版权,如要转载,请务必著名出处和作者
  4. #include <iostream>
  5. using namespace std;
  6. class Base
  7. {
  8. public://公有的
  9. int a1;
  10. virtual void test() = 0;
  11. protected://受保护的
  12. int a2;
  13. private://私有的
  14. int a3;
  15. };
  16. //------------------------------------------------------------------------------
  17. class ProtectedClass:protected Base//保护继承
  18. {
  19. public:
  20. void test()
  21. {
  22. a1 = 1;//a1 在这里被转变为protected
  23. a2 = 2;//a2 在这里被转变为protected
  24. //a3=3;//错误,派生类不能访问基类的私有成员
  25. }
  26. };
  27. class ControlProtectedClass:public ProtectedClass//以public 方式继承ProtectedClass 类
  28. {
  29. public:
  30. void test()
  31. {
  32. a1 = 1;//a1 在这里仍然保持为a1 在这里被转变为protected
  33. a2 = 2;//a2 在这里仍然保持为a1 在这里被转变为protected
  34. //a3=3;//错误,由于Base 类成员为私有的,即使是上级父类是保护继承,也不能改变Base 类成员的控制类型
  35. }
  36. };
  37. //------------------------------------------------------------------------------
  38. class PrivateClass:private Base//私有继承
  39. {
  40. public:
  41. void test()
  42. {
  43. a1 = 1;//a1 在这里被转变为private
  44. a2 = 2;//a2 在这里被转变为private
  45. //a3=3;//错误,基类私有成员对文件区域与派生类区域都是不可访问的
  46. }
  47. };
  48. class ControlPrivateClass:public PrivateClass//以public 方式继承PrivateClass 类
  49. {
  50. public:
  51. void test()
  52. {
  53. //a1=1;//错误,由于基类PrivateClass 为私有继承,a1 已经转变为private
  54. //a2=2;//错误,由于基类PrivateClass 为私有继承,a1 已经转变为private
  55. //a3=3;//错误,由于Base 类成员为私有的,PrivateClass 类也为私有继承
  56. }
  57. };
  58. //------------------------------------------------------------------------------
  59. class PublicClass:public Base//共有继承有区别与其它方式的继承,继承后的各成员不会其改变控制方式
  60. {
  61. public:
  62. void test()
  63. {
  64. a1 = 1;//a1 仍然保持public
  65. a2 = 2;//a2 仍然保持protected
  66. //a3=3;//错误,派生类不能操作基类的私有成员
  67. }
  68. };
  69. class ControlPublicClass:public PublicClass//以public 方式继承PublicClass 类
  70. {
  71. public:
  72. void test()
  73. {
  74. a1 = 1;//a1 仍然保持public
  75. a2 = 2;//a2 仍然保持protected
  76. //a3=3;//错误,由于Base 类成员为私有成员,即使是上级父类是公有继承,也不能改变Base 类成员的控制类型
  77. }
  78. };
  79. //------------------------------------------------------------------------------
  80. int main()
  81. {
  82. system("pause");
  83. }
认真看完了例子,相信细心的读者对于共有继承、保护继承与私有继承的区别与特点已经了解,最后再提醒一下读者,在继承关系中,基类的private 成员不但对应用程序隐藏,即使是派生类也是隐藏不可访问的,而基类的保护成员只对应用程序隐藏,对于派生类来说是不隐藏的,保护继承与私有继承在实际编程工作中使用是极其少见的,他们只在技术理论上有意义。
阅读(576) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~