Advertisement
Derga

Untitled

May 21st, 2023
1,122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.13 KB | None | 0 0
  1. //Билет 5
  2. //Целочисленные константы класса
  3.  
  4. //Инициализация констант в классе. Примеры
  5. class MyClass1 {
  6.     const int val = 50;
  7.     //const int val;
  8. public:
  9.     MyClass1() = default;
  10.     /*
  11.     MyClass(int new_val) {
  12.         val = new_val; // ошибка. Поле val в этот момент уже создано и
  13.                        //так как оно константное - его нельзя менять
  14.     }
  15.     */
  16.  
  17.     //тут мы инициализируем val в момент создания, через лист инициализации, "налету"
  18.     MyClass1(int new_val) : val(new_val) {}
  19.  
  20.     /*
  21.      Поэтому либо используйте статическую константу, которая сто процентов не изменится,
  22.      либо используйте константу + динамический массив.
  23.     */
  24.     int GetVal() const {
  25.         return val;
  26.     }
  27.  
  28.     //так как val можно изменить - можно создать динамический массив, а статический нельзя
  29.     int* pointer_i = new int[val]; //можно
  30.     //нельзя
  31.     //int a[val];
  32. };
  33.  
  34. class MyClass2 {
  35.     static const int val = 50;
  36. public:
  37.     //так сделать уже нельзя
  38.     //MyClass2(int new_val) : val(new_val) {}
  39.  
  40.     int GetVal() const {
  41.         return val;
  42.     }
  43.  
  44.     //так как val - невозможно изменить - можно создать и динамический и статический массивы размера val
  45.     int* pointer_i = new int[val];
  46.     int a[val];
  47. };
  48.  
  49. #include <iostream>
  50.  
  51. int main() {
  52.     //Тут пример, как можно в констаное поле класса записать значение.
  53.     MyClass1 a;
  54.     std::cout << a.GetVal() << '\n';
  55.  
  56.     MyClass1 b(100);
  57.     std::cout << b.GetVal() << '\n';
  58.  
  59.     //Тут пример класса, константное поле котороего переписать не получится
  60.  
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement