C++ 继承,private 以及 protected

╰半夏微凉° 2022-06-04 02:09 305阅读 0赞
  1. class CA
  2. {
  3. public:
  4. protected:
  5. private:
  6. int nID;//声明为private
  7. };
  8. class CB:public CA
  9. {
  10. public:
  11. CB(){
  12. nID=0;//第二层不能访问了
  13. }
  14. protected:
  15. private:
  16. };
  17. class CA
  18. {
  19. public:
  20. protected:
  21. int nID;//声明为protected
  22. private:
  23. };
  24. class CB:public CA
  25. {
  26. public:
  27. CB(){
  28. nID=0;//第二层可以访问
  29. }
  30. protected:
  31. private:
  32. };
  33. class CC:public CB
  34. {
  35. public:
  36. CC(){
  37. nID=0;//第二层可以访问
  38. }
  39. protected:
  40. private:
  41. };
  42. //有一个场景,需要将nID变更为2,那么我们可以通过前置基父类继承,也可以使用后继子类继承
  43. //下面是前置父类继承
  44. /*优点
  45. 1.CB类可以保持原来代码不动,只需要更新CA_A的代码即可
  46. 2.如果还有其他类需要此变更可以直接继承CA_A的类
  47. */
  48. class CA
  49. {
  50. public:
  51. volatile int nID;//声明为protected
  52. protected:
  53. virtual int Test()=0;
  54. private:
  55. };
  56. class CA_A:public CA
  57. {
  58. public:
  59. protected:
  60. virtual int Test(){
  61. nID=1;
  62. }
  63. private:
  64. };
  65. class CB:public CA_A
  66. {
  67. public:
  68. CB(){
  69. nID=0;//第二层可以访问
  70. }
  71. protected:
  72. private:
  73. };
  74. //下面是后置子类继承
  75. /*优点
  76. 1.CB类可以保持原来代码不动,只需要更新CC的代码即可
  77. 2.需要核查原先的代码是否需要新功能需求,如果原先都得使用新功能需求则CB的调用全都改成CC调用
  78. 3.可以独立封装使用,原先CB的类的使用可以保持不动,新增加功能可以使用CC即可
  79. */
  80. class CA
  81. {
  82. public:
  83. volatile int nID;//声明为protected
  84. protected:
  85. virtual int Test()=0;
  86. private:
  87. };
  88. class CB:public CA
  89. {
  90. public:
  91. CB(){
  92. nID=0;//第二层可以访问
  93. }
  94. virtual int Test(){
  95. nID=2;//原先实现的是等于2,后面需要改成1,假设不动这里的代码
  96. }
  97. protected:
  98. private:
  99. };
  100. class CC:public CB
  101. {
  102. public:
  103. CC(){
  104. nID=0;//第二层可以访问
  105. }
  106. virtual int Test(){
  107. nID=1;//通过继承CB,然后实现Test的功能即可,使用时有这种新特殊需求构造CC的对象出来即可
  108. }
  109. protected:
  110. private:
  111. };
  112. //C++ 继承构造函数
  113. class CA
  114. {
  115. public:
  116. CA(){
  117. }
  118. CA(IN int n):nID(n)
  119. {
  120. }
  121. protected:
  122. volatile int nID;//声明为protected
  123. private:
  124. };
  125. class CB:public CA
  126. {
  127. public:
  128. CB()
  129. {//1.无疑这个构造函数肯定是调用CA()构造函数
  130. nID=0;//第二层可以访问
  131. }
  132. CB(IN int n)
  133. //CB(IN int n):CA(n) //这里才是想要的
  134. {//2.但是这个构造函数是调用CA()还是CA(IN int n)构造函数呢?答案是:CA(),VS2010,所以如果要显示调用对应的函数,改成注释那一块内容接口
  135. nID=n;
  136. }
  137. protected:
  138. private:
  139. };

发表评论

表情:
评论列表 (有 0 条评论,305人围观)

还没有评论,来说两句吧...

相关阅读