Advertisement
Derga

Untitled

May 21st, 2023
947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. /*
  2. Билет 5
  3.   Константные методы
  4.  
  5. Методом класса называют функцию из класса.
  6. Ниже класс Time - в нем хранится время - часы, минуты, секунды.
  7. Константный метод не меняет состояние класса. Это добавляет удобства и безопасности в работе с классами.
  8.  
  9. Например - в классе Time есть константные методы GetHours() const, GetMinutes() const -
  10. они не меняют оюъект класса, а только возвращают значения из соответствующих полей.
  11.  
  12. Также в классе есть метод AddSeconds(int s) - этот метод меняет состояние объекта класса,
  13. добавляет секунды в поле seconds. Так как этот метод меняет состояние - он не может быть константным
  14. и также не может работать с константными объектами класса.
  15. */
  16.  
  17. class Time {
  18. private:
  19.     int hours, minutes, seconds;
  20.  
  21. public:
  22.     Time(int h, int m, int s) : hours(h), minutes(m), seconds(s) {}
  23.  
  24.     int GetHours() const {
  25.         return hours;
  26.     }
  27.     int GetMinutes() const {
  28.         return minutes;
  29.     }
  30.     int GetSeconds() const {
  31.         return seconds;
  32.     }
  33.  
  34.     void AddSeconds(int s) {
  35.         seconds += s; //понятно, что секунд не может быть больше 60,
  36.                       //не настраиваем этот нюанс, так как разбираем тут другую тему - константность методов
  37.     }
  38. };
  39.  
  40. #include <iostream>
  41.  
  42. int main() {
  43.     Time t(10, 8, 0);  // 10:08:00
  44.     t.AddSeconds(40);  // 10:08:40
  45.  
  46.     // Константная ссылка: через псевдоним cref объект нельзя изменять
  47.     const Time& cref = t;
  48.  
  49.     // Константную функцию из класса вызвать можно
  50.     std::cout << cref.GetHours() << "\n";  // OK
  51.  
  52.     // Неконстантную функцию из класса нельзя вызвать у константной сущности
  53.     cref.AddSeconds(20);  // ошибка компиляции
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement