当前位置:   article > 正文

C++ 54 之 继承中同名的静态成员处理

C++ 54 之 继承中同名的静态成员处理
  1. #include <iostream>
  2. using namespace std;
  3. // 父类
  4. class Base07{
  5. public:
  6. static int m_a; // 静态成员,类内定义
  7. static void fun(){
  8. cout << "Base中的fun"<< endl;
  9. }
  10. static void fun(int a){
  11. cout << "Base中的fun(int a)"<< endl;
  12. }
  13. };
  14. int Base07::m_a = 10; // 静态成员,类外初始化
  15. // 子类
  16. class Son07 : public Base07{
  17. public:
  18. static int m_a; // 静态成员,类内定义
  19. static void fun(){
  20. cout << "son中的fun"<< endl;
  21. }
  22. };
  23. int Son07::m_a = 20; // 静态成员,类外初始化
  24. int main()
  25. {
  26. Son07 s1;
  27. // 静态成员变量
  28. // 同名成员,就近原则
  29. // 1.通过对象访问
  30. cout << "子类中的m_a: " << s1.m_a << endl;
  31. cout << "父类中的m_a: " << s1.Base07::m_a << endl;
  32. cout << "-----------------" << endl;
  33. // 2.通过类名访问
  34. cout << "子类中的m_a: " << Son07::m_a << endl;
  35. cout << "父类中的m_a: " << Son07::Base07::m_a << endl;
  36. cout << "父类中的m_a: " << Base07::m_a << endl;
  37. cout << "*****************" << endl;
  38. // 静态成员函数
  39. // 同名成员,就近原则
  40. // 1.通过对象访问
  41. s1.fun();
  42. s1.Base07::fun();
  43. cout << "-----------------" << endl;
  44. // 2.通过类名访问
  45. Son07::fun();
  46. Son07::Base07::fun();
  47. cout << "-----------------" << endl;
  48. // 子类中定义了和父类同名的成员函数,父类的同名成员函数都会被隐藏。可以通过作用域来调用
  49. // s1.fun(10); // 无法调用
  50. s1.Base07::fun(10);
  51. return 0;
  52. }

 

继承中的静态成员特性

静态成员函数和非静态成员函数的共同点:

  1. 他们都可以被继承到派生类中。
  2. 如果重新定义一个静态成员函数,所有在基类中的其他重载函数会被隐藏。
  3. 如果我们改变基类中一个函数的特征,所有使用该函数名的基类版本都会被隐藏。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/756364
推荐阅读
相关标签
  

闽ICP备14008679号