2014-02-21 3 views
0

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

#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-> в режиме сброса() или почему нет ни в приведенной выше функции.

void Metro::reset() 
{ 

    this->previous_millis = millis(); 

} 

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

Спасибо.

ответ

1

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

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

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

Спасибо, я вижу необходимость в конструкторе (без знака длинный), но другой не имеет смысла, поскольку он, очевидно, знает, что он не нуждается в нем только в функции выше. Странные вещи. Спасибо за ответ! – user3299912

+0

@ user3299912 Вы говорите спасибо, но не приняли ответ. Есть ли что-то еще, где вы ищете? – jdr5ca

0

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