2012-03-12 71 views
1

爲什麼人們不這樣編碼?紅寶石風格!C++操作符setter ruby​​風格

#include <stdio.h> 

class Name { 
    public: 
     void operator=(char *to) { 
      name = to; 
      printf("Change!\n"); 
     } 
    private: 
     char *name; 
}; 

class Human { 
    public: 
     //char *name; 
     Name name; 
}; 

int main() { 
    Human andreas = Human(); 
    andreas.name = "Andreas"; 
    printf("%s\n", andreas.name); 
} 

使用公有成員函數,直到你需要的東西添加到二傳手。然後把它換成operator =類。

+6

誰說他們沒有? – ildjarn 2012-03-12 22:43:05

+3

你好,屬性。 – Xeo 2012-03-12 22:43:18

+1

因爲有公共數據成員違反封裝,爲一。 – 2012-03-12 22:44:41

回答

3

使用公共成員函數,直到你需要添加一些東西給setter。然後把它換成operator =類。

因爲如果到時候你需要改變它,你的項目已經成長百倍,現在你需要在很多不同的地方改變代碼 - 甚至在其他項目中,也許,如果你出貨庫。

換句話說,你破壞代碼。 很多的代碼。

即使你現在沒有編寫一個庫,總是有機會在一個更一般的設置中重用一段代碼。不要指望每一段代碼都會在本地使用。

除此之外,沒有什麼大的動機爲setter提供簡單的語法,因爲setters實際上很少需要。現代C++致力於最小化對創建對象的更改。這使得關於對象的狀態以及因此關於程序狀態的推理更容易。這反過來降低了複雜性,錯誤和維護。

0

這樣的開關打破了界面,這是你通常要避免的。