это-> в пустых публичных функциях

0

Библиотека Arduino обнародована в github, есть несогласованность с его this-> Я не уверен, что понимаю. Мне интересно, нужен ли this-> prev_milliseconds в большинстве случаев, он использовал их.

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
#include "Metro.h"

Metro::Metro()
{

this->interval_millis = 1000;

}


Metro::Metro(unsigned long interval_millis)
{

this->interval_millis = interval_millis;

}


void Metro::interval(unsigned long interval_millis)
{
  this->interval_millis = interval_millis;
}

uint8_t Metro::check()
{

  unsigned long now = millis();

  if ( interval_millis == 0 ){
    previous_millis = now;
return 1;
  }

  if ( (now - previous_millis) >= interval_millis) {
#ifdef NOCATCH-UP
previous_millis = now ;
#else
previous_millis += interval_millis ;
#endif
    return 1;
  }

  return 0;

}

void Metro::reset()
{

  this->previous_millis = millis();

}

Точнее, я не вижу необходимости в this-> в reset() или почему в этой функции нет.

void Metro::reset()
{

  this->previous_millis = millis();

}

Что я забываю или наблюдаю? Или что он делает не так? (сомнительно, учитывая, откуда я это взял).

Благодарю.

Теги:
arduino

2 ответа

1
Лучший ответ

Вы правы, this может использоваться неявно в этом состоянии. Он также может быть использован явно, как это делается в коде, который вы показали.

В этой ситуации этот код:

void Metro::reset() {
  this->previous_millis = millis();
}

эквивалентно:

void Metro::reset() {
  previous_millis = millis(); // this-> will be resolved implicitly by the compiler
}

Однако обратите внимание, что в этом примере элемент не будет изменен, а только локальная переменная.

void Metro::reset() {
  unsigned long previous_millis;
  previous_millis = millis(); // will assign to local variable
  this->previous_millis = millis(); // will assign to class member
}
  • 0
    Спасибо, я вижу необходимость в этом в конструкторе (без знака long), но другой не имеет смысла, так как он, очевидно, знает, что он не нужен в функции чуть выше. Странные вещи. Спасибо за ответ!
  • 0
    @ user3299912 Вы говорите спасибо, но не приняли ответ. Есть ли что-то еще, что вы ищете?
0

Нет, там не требуется, это используется для обозначения определенного свойства объекта, и для этого вам нужна другая переменная с тем же именем. Как и в большинстве методов, но не в Сбросе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню