2014-04-07 58 views
0

我已經看到了用於構建狀態機的boost示例中的代碼部分。我困惑的是兩個成員函數ElapsedTime()?這是否允許兩個函數具有相同的簽名,如函數名稱和參數類型?在同一個類/結構中具有相同簽名的相同函數?超載?

我已經搜索了很多,但沒有任何運氣找到相關的信息。任何意見,將不勝感激。

struct Active : sc::simple_state< Active, StopWatch, Stopped > 
{ 
public: 
    typedef sc::transition< EvReset, Active > reactions; 

    Active() : elapsedTime_(0.0) {} 
    double ElapsedTime() const { return elapsedTime_; } 
    double & ElapsedTime() { return elapsedTime_; } 

private: 
    double elapsedTime_; 
}; 
+1

它們沒有相同的參數類型,因爲它們中的一個是'const'(這意味着隱式傳遞'this'指針是'const')。第二,它不是。 –

+1

他們沒有相同的簽名,一個是常量,另一個不是 – PlasmaHH

+1

@BenjaminBannier小修正:_隱式傳遞'this'指針是**到**'const'_。這當然是你的意思。 – sehe

回答

0

函數的簽名由名稱和參數類型定義。 你有兩個具有相同名稱的函數,但他們沒有得到相同的參數!

你可能想知道它怎麼可能?

因此,每個成員函數都隱含地獲取另一個參數:這是「this」指針。指向調用該方法的對象的指針。

當您在方法的末尾添加const時,可以將「this」參數指定爲指向const的const指針。在另一種方法(不帶const)中,「this」的類型只是const指針

因此,您有兩種不同簽名的方法,根本沒有問題。

1

它們沒有相同的簽名 - 一個是const,另一個不是。 Constness是成員函數簽名的一部分。

相關問題