基本概念

静态成员:在说明前加了static关键字的成员

静态成员和普通成员的区别

3.PNG

如何访问静态成员

4.PNG
注意:
1.后三种访问方式叫做实例方法,它们仅仅是一种形式而已,不意味着这些静态成员属于或者作用于某个指定的对象!
2.建议使用第一种类方法的形式

关于静态成员的深入理解

5.PNG
6.PNG

代码实例

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. class Rect
  4. {
  5. private:
  6. int w, h;
  7. static int TotalNumber;
  8. static int TotalArea;
  9. public:
  10. Rect(int, int);//普通构造函数
  11. Rect(const Rect &);//复制构造函数
  12. ~Rect(void);//析构函数
  13. static void PrintTotal(void);
  14. };
  15. Rect::Rect(int _w, int _h)
  16. {
  17. w = _w;
  18. h = _h;
  19. TotalNumber++;
  20. TotalArea += w * h;
  21. }//有对象被初始化
  22. Rect::Rect(const Rect &r)
  23. {
  24. w = r.w;
  25. h = r.h;
  26. TotalNumber++;
  27. TotalArea += w*h;
  28. }//有对象被初始化
  29. Rect::~Rect(void)
  30. {
  31. TotalArea -= w * h;
  32. TotalNumber--;
  33. }//有对象消亡了
  34. void Rect::PrintTotal(void)
  35. {
  36. cout << TotalNumber << ends << TotalArea << endl;
  37. }
  38. int Rect::TotalArea=0;
  39. int Rect::TotalNumber=0;//必须对静态成员变量进行说明或者初始化,否则编译通过而链接不会通过
  40. int main(void)
  41. {
  42. Rect r1(2, 3), r2(4, 5);
  43. Rect r3(r2);
  44. Rect *r4 = new Rect(6, 7);
  45. delete r4;
  46. Rect::PrintTotal();// 3 46
  47. return 0;
  48. }

注意:在静态成员函数中,不可以直接访问非静态成员变量,也不可以直接调用非静态成员函数,不过反过来是可以的