2010-12-20 41 views
5

我在想,如果這個 - >應使用兩種:何時應該使用?

void SomeClass::someFunc(int powder) 
{ 
    this->powder = powder; 
} 

//and 
void SomeClass::someFunc(bool enabled) 
{ 
    this->isEnabled = enabled; 
} 

我想知道如果是後者必須是正確的,或者的IsEnabled =啓用就足夠了。

感謝

+2

爲什麼不直接繼續嘗試呢? .. this->只在存在歧義時才需要(例如,第一種情況,參數優先,但還有其他情況,如一些不明確的模板情況)。 – falstro 2010-12-20 15:50:28

+0

我知道什麼可行,什麼不是我的意思哪一個是適當的OOP – jmasterx 2010-12-20 15:51:21

+9

正確的OOP沒有評論這個問題。很像支架位置,它是編碼風格的問題。 – stonemetal 2010-12-20 15:52:58

回答

4
this-> 

當直接使用該成員時將是不明確的。這可能發生在模板代碼中。

考慮一下:

#include <iostream> 

template <class T> 
class Foo 
{ 
    public: 
     Foo() {} 
    protected: 
     void testing() { std::cout << ":D" << std::endl; } 
}; 

template <class T> 
class Bar : public Foo<T> 
{ 
    public: 
     void subtest() { testing(); } 
}; 

int main() 
{ 
    Bar<int> bar; 
    bar.subtest(); 
} 

這將調用自測試失敗()是依賴於模板參數。如果說,你指的是功能,您將不得不做this->testing();Foo<T>::testing();

錯誤消息:

temp.cpp: In member function ‘void Bar<T>::subtest()’: 
temp.cpp:16:32: error: there are no arguments to ‘testing’ that depend on a template parameter, so a declaration of ‘testing’ must be available [-fpermissive] 
temp.cpp:16:32: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated) 
+1

這不是因爲含糊不清,而是因爲從屬名稱的查找被延遲到實例化點。 – 2010-12-20 16:17:10

3

this只是一個指向對象本身。它是爲了可讀性而製作的,以便您知道您正在引用對象函數或變量,而不是函數中的內容。

我不認爲有任何其他很好的理由除了可讀性:-)

,如果你想避免不明確的引用它也是良好的。假設你的函數中有一個全局變量和一個名稱相同的變量,那麼this->會引用全局變量。

+0

在某些情況下,它有助於解決模糊問題(儘管可以說是可讀性問題)。 – Nate 2010-12-20 15:53:53

1

我認爲在C++中你忽略了this->,但它可能是個人偏好。無論代碼還是沒有,代碼仍然會執行相同的操作。

0

我傾向於遵循大拇指的這個簡單的規則:

  • 屬性:沒有this,如果它不是方法的參數,那麼它顯然是該類的一個屬性(並且我傾向於依靠命名約定來區分它們)
  • 方法:this->,區分自由站立功能類方法

第二也帶來了一致性,因爲它可能在template d代碼是必要的(我寫了不少了,尤其是我的寵物項目)。

這背後的基本原理很簡單:儘可能多地寫出明確的內容(即讓讀者的生活更容易),但不會是更多的針跡(這會變得混亂),它遵循聖安德魯的聖安德烈的方法:

達到了完美,而不是當沒有更多東西需要補充時,而是什麼時候沒有東西可以拿走。

相關問題