2012-03-12 34 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

这样的开关打破了界面,这是你通常要避免的。