Свой тип данных с границами в C++

103
30 октября 2021, 05:00

Мне нужно создать тип данных Percent, который бы хранил в себе только целые числа от 0 до 100, и чтобы логика была такая:

Percent a;
a = 101; // В a бы клалось не 101, а 100.
a = -5;  // В a клалось бы не -5, а 0.

И так далее. Как это можно реализовать?

Answer 1

На C++ давно не писал, но видимо вам нужно что-то типа:

class Percent {
  uint8_t value;
public:
  const static int MAX_VALUE = 100;
  const static int MIN_VALUE = 0;
  Percent(int v) {
    if (v > MAX_VALUE) {
      this->value = MAX_VALUE;
    } else if (v < MIN_VALUE) {
      this->value = MIN_VALUE;
    } else {
      this->value = v;
    }
  }
  operator int() const { return this->value; }
};
Percent p = 128;
std::cout << p << std::endl;
// Output:
//   100
p = -5;
std::cout << p << std::endl;
// Output:
//   0
Answer 2

Небольшой пример:

class Procent {
public:
    ...
    Procent& operator =(int v) {
        _v = v >= 100? 100: (v < 0? 0: v);
        return *this;
    } 
    ... 
private:
    int _v;
}

Остальное аналогично

READ ALSO
При клике на ссылку закрытие меню (jquery)

При клике на ссылку закрытие меню (jquery)

У меня есть меню для мобильной версии; я не силен в js и jqueryЯ не понимаю, как сделать так, что бы при нажатии на ссылку меню закрывалось

112
Google website Mobile-friendly Тест с провалами

Google website Mobile-friendly Тест с провалами

Есть сайт Ссылка который я максимально пытаюсь оптимизировать под разные устройстваПока что работаю с главной странницой

112
Защита от XSS, простая задача

Защита от XSS, простая задача

Здрасте, вот есть такое задание, уже пол ночи сижу, не могу понять как это сделать, просто еще не проходили этот материал, но задание уже далиПомогите...

251
Цикл forEach. Обращение к элементу с index + 1

Цикл forEach. Обращение к элементу с index + 1

Если я обращаюсь к элементу с индексом + 1 - ничего не работаетЕсли index - 1 - все ОК

279