2013-07-24 44 views
0
class ABC{ 
    public : 
     int a; 
    public : 
     int getData(){ 
     return a; 
     } 
    } 
    void main() 
    { 
     ABC abc; 
     cout<< abc.a; //1 
     cout<<abc.getData();//2 
    } 

現在,如果我訪問變量"a"在這種情況下的編譯器需要較少的訪問'a'時間。 我想第一個案例,但不知道。訪問類的變量通常或者通過函數

+1

這兩者不相等。該函數爲您提供數據成員'a'的*副本*。 – juanchopanza

+1

'void main'不合法。使用'int main'。 – chris

回答

1

這兩種方法是不完全等同:

  1. 直接訪問成員讀取構件本身的價值,同時
  2. get方法返回變量的副本,讓你從副本讀這樣。

關於課程#1的表現應該更快,因爲不涉及任何複製,但大多數現代編譯器將應用複製elision來刪除正在創建的額外副本。

相反,您應該考慮在您的組織/機構中遵循的編碼準則的一致性。

+0

我不認爲copy elision可以在這裏適用,但「如果」規則將允許在正確的情況下不能複製。 – juanchopanza

1

這是所有的編碼風格。擁有私有成員只是一種安全措施,因此任何外部實體都無法直接訪問並修改它(這種類型與聲明作爲安全屏障的變量const的相同概念)。公共訪問器是用於訪問成員值的函數,公共修飾符用於通過函數更改值。這只是編碼慣例。直接傳遞一個成員而不是一個函數會更快,因爲沒有拷貝。

0

我會把這樣的:

  • 如果有比簡單的設置/返回變量(如範圍檢查,例如)以外的存取任何東西,變絕對應該是私有的。這是確保這個附加代碼實際得到執行的唯一方法。

  • 如果您只需要一個存取器,因爲您不希望變量可查詢或可變,變量也應該是私有的。

  • 如果你想定義一個vanilla getter和setter,我認爲,讓變量公開並忘記訪問器是安全的。無論如何,這個變量實際上是公開的。在這種情況下訪問器只是冗餘代碼,因此不應該膨脹你的代碼。而且之後很容易製作一個公共變量private,因爲編譯器會盡職盡責地列出你需要調整的每一行代碼。

簡而言之:默認情況下使用私有變量,並考慮您寫入的每個訪問者,因爲它會爲您的封裝打洞。