2014-02-21 110 views
0

Arduino庫在github上公開,與他的這個不一致 - >我不確定我是否理解。我想知道在他使用它們的大多數情況下是否需要this-> prev_milliseconds。this-> in void公共職能

#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(); 

} 

更確切地說,我沒有看到在reset()中需要this->或者爲什麼上面的函數中沒有。

void Metro::reset() 
{ 

    this->previous_millis = millis(); 

} 

什麼是我忘記或監督?或者他做錯了什麼? (懷疑考慮從哪裏拿這個。)

謝謝。

回答

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

謝謝,我在構造函數(unsigned long)中看到它的需要,但另一個沒有意義,因爲他明顯知道他不需要它在上面的函數中。奇怪的東西。謝謝回覆! – user3299912

+0

@ user3299912你說謝謝,但沒有接受答案。有什麼你在哪裏尋找? – jdr5ca

0

不,不需要那裏,這是用來指對象的某些屬性,它需要你有另一個同名的變量。正如您在大多數方法中所使用的,而不是在重置方法中那樣。