Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Билет 5
- статические поля и методы класса.
- Если у нас в классе есть статическая переменная - она будет общей для всех объектов класса.
- Например с помощью статической переменной можно вести подсчет числа созданных объектов нашего класса.
- */
- #include <iostream>
- class Point {
- public:
- Point() {
- points_counter++;
- }
- ~Point() {
- points_counter--;
- }
- double x, y;
- static int points_counter;
- static int GetPointsCount() {
- return points_counter;
- }
- /*
- В статическом методе класса нельзя обращаться к не статическим полям и к объекут this
- static void DoSomthing(){
- this->x = 10;
- y = 11; //тут не понятно к какому объекту класса Point мы обращаемся.
- }
- */
- static void ChangePoint(Point& point, int x, int y) {
- //тут понятно к какому объъекту класса point мы обращаемся, мы получили этот объект в качестве аргумета
- point.x = x;
- point.y = y;
- }
- };
- int Point::points_counter = 0;
- int main(){
- Point a;
- std::cout << Point::points_counter << '\n';
- Point b;
- std::cout << Point::points_counter << '\n';
- Point c;
- std::cout << Point::points_counter << '\n';
- /*
- Так как наша переменная points_counter лежит в public области видимости - мы можем обратиться к ней напрямую и
- поменять значение. Так мы испортим ее смысл (поэтому ее следовало бы держать в области видимости private), но
- проиллюстрируем, что такое static переменная.
- запишем в нее другое значение в объекте с именем - a,
- затем выведем значение этого поля в других объектах класса Point
- */
- a.points_counter = 10;
- std::cout << b.points_counter << ' ' << c.points_counter << '\n';
- /*
- Статичесие методы - методы, это например методы,
- которые работают со статическими переменными класса или
- вызывают внутри себя другие статические методы класса.
- Например метод GetPointsCount() - работает со статической переменной класса Point
- Можновызывать его нессколькими способами
- */
- std::cout << Point::GetPointsCount() << '\n';
- std::cout << a.GetPointsCount() << '\n';
- //ниже два способа работы со статическим методом. Один через объект класса, другой через namespace класса
- std::cout << a.x << ' ' << a.y << '\n';
- a.ChangePoint(a, 0, 0);
- std::cout << a.x << ' ' << a.y << '\n';
- Point::ChangePoint(a, 1, 1);
- std::cout << a.x << ' ' << a.y << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement