Advertisement
Derga

Untitled

May 21st, 2023
995
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.41 KB | None | 0 0
  1. /*
  2. Билет 5
  3.   статические поля и методы класса.
  4.   Если у нас в классе есть статическая переменная - она будет общей для всех объектов класса.
  5.   Например с помощью статической переменной можно вести подсчет числа созданных объектов нашего класса.
  6. */
  7. #include <iostream>
  8.  
  9. class Point {
  10. public:
  11.     Point() {
  12.         points_counter++;
  13.     }
  14.     ~Point() {
  15.         points_counter--;
  16.     }
  17.     double x, y;
  18.     static int points_counter;
  19.  
  20.     static int GetPointsCount() {
  21.         return points_counter;
  22.     }
  23.  
  24.    
  25.     /*
  26.     В статическом методе класса нельзя обращаться к не статическим полям и к объекут this
  27.     static void DoSomthing(){
  28.     this->x = 10;
  29.     y = 11; //тут не понятно к какому объекту класса Point мы обращаемся.
  30.     }
  31.     */
  32.  
  33.     static void ChangePoint(Point& point, int x, int y) {
  34.         //тут понятно к какому объъекту класса point мы обращаемся, мы получили этот объект в качестве аргумета
  35.         point.x = x;
  36.         point.y = y;
  37.     }
  38.  
  39. };
  40.  
  41. int Point::points_counter = 0;
  42.  
  43. int main(){
  44.     Point a;
  45.     std::cout << Point::points_counter << '\n';
  46.     Point b;
  47.     std::cout << Point::points_counter << '\n';
  48.     Point c;
  49.     std::cout << Point::points_counter << '\n';
  50.  
  51.     /*
  52.     Так как наша переменная points_counter лежит в public области видимости - мы можем обратиться к ней напрямую и
  53.     поменять значение. Так мы испортим ее смысл (поэтому ее следовало бы держать в области видимости private), но
  54.     проиллюстрируем, что такое static переменная.
  55.     запишем в нее другое значение в объекте с именем - a,
  56.     затем выведем значение этого поля в других объектах класса Point
  57.     */
  58.     a.points_counter = 10;
  59.     std::cout << b.points_counter << ' ' << c.points_counter << '\n';
  60.  
  61.     /*
  62.     Статичесие методы - методы, это например методы,
  63.     которые работают со статическими переменными класса или
  64.     вызывают внутри себя другие статические методы класса.
  65.     Например метод GetPointsCount() - работает со статической переменной класса Point
  66.     Можновызывать его нессколькими способами
  67.     */
  68.     std::cout << Point::GetPointsCount() << '\n';
  69.     std::cout << a.GetPointsCount() << '\n';
  70.  
  71.     //ниже два способа работы со статическим методом. Один через объект класса, другой через namespace класса
  72.     std::cout << a.x << ' ' << a.y << '\n';
  73.     a.ChangePoint(a, 0, 0);
  74.     std::cout << a.x << ' ' << a.y << '\n';
  75.     Point::ChangePoint(a, 1, 1);
  76.     std::cout << a.x << ' ' << a.y << '\n';
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement