Перегрузка постфиксных операторов ++ и --

Maka
Offline
Зарегистрирован: 24.10.2015

Эпиграф:

char я[] = {"дятел"};

Хочу создать класс для лимитирования диапазона переменных в процессе инкремента - декремента. В учебниках примерно такое:

class lev {
  public:
lev & operator ++()
{
  return (*this)++; 
}
};
lev level;

Как мне прописать туда само ограничение, предположим от 0 до 100?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Хрень написана

Maka
Offline
Зарегистрирован: 24.10.2015

Понятно хрень, знал бы как, не спрашивал. Как правильно?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Щас подскажут. Мне с планшета неудобно.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Типа такой фигни надо?

class Integer
{
  public:
    int value;
    void operator ++()
    {
      ++value;
      if(value > 100)
        value = 0;
    };
    void operator ++(int)
    {
      value++;
      if(value > 100)
        value = 0;
    };
    void operator --()
    {
      --value;
      if(value < 0)
        value = 100;
    };
    void operator --(int)
    {
      value--;
      if(value < 0)
        value = 100;
    };
};

Integer myInt;

void setup()
{
  Serial.begin(9600);
  myInt.value = 95;
}

void loop()
{
  ++myInt;
  Serial.println(myInt.value);
  delay(1000);
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Отдавать я бы стал не void а значение value

Maka
Offline
Зарегистрирован: 24.10.2015

Спасибо!!! А как с изменением исжодной переменной? То есть 

int i = 50;
void setup()
{
  Serial.begin(9600);
  myInt.value = i;
}
void loop()
{
  ++myInt; // изменение переменной i
  Serial.println(myInt.value);
  delay(1000);
}

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Можно через указатели

class Integer
{
  public:
    int *value;
    void operator ++()
    {
      ++*value;
      if(*value > 100)
        *value = 0;
    };
    void operator ++(int)
    {
      *value++;
      if(*value > 100)
        *value = 0;
    };
    void operator --()
    {
      --*value;
      if(*value < 0)
        *value = 100;
    };
    void operator --(int)
    {
      *value--;
      if(*value < 0)
        *value = 100;
    };
};

Integer myInt;

int i = 95;

void setup()
{
  Serial.begin(9600);
  myInt.value = &i;
}

void loop()
{
  ++myInt;
  Serial.println(i);
  delay(1000);
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Похоже Penny конструкторы в классе потерял. Вот и приходится костыль стр 38 ставить.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

qwone пишет:

Похоже Penny конструкторы в классе потерял. Вот и приходится костыль стр 38 ставить.

Да так и есть, это просто для примера было. С телефона лень много набирать.

Maka
Offline
Зарегистрирован: 24.10.2015

Про конструктор класса буду читать.

В последнем скетче ++myInt; работает а myInt++; нет.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Maka пишет:
Про конструктор класса буду читать.
Про конструктор не буду читать, а читал и знаю. Класс без конструктора это когда ходишь в туалет, штаны не снимаешь и ширинку не растегиваешь. Мол так только "крутые пассаны" делают.

ПС:https://habrahabr.ru/post/132014/

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Maka пишет:

В последнем скетче ++myInt; работает а myInt++; нет.

Ну, мозги-то и самому надо включать, а не только ждать, что кто-то всё распишет. Скобки поставьте в строка 13 и 25