C ++运算符setter ruby​​风格

时间:2012-03-12 22:41:15

标签: c++ ruby operators overloading 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);
}

使用公共成员函数,直到您需要向setter添加内容。然后使用operator =。

将其切换为一个类

2 个答案:

答案 0 :(得分:3)

  

使用公共成员函数,直到您需要向setter添加内容。然后使用operator =。

将其切换为一个类

因为当你需要更改它时,你的项目已经增长了百倍,现在你需要在许多不同的地方更改代码 - 甚至在其他项目中,如果你要运送一个库。

换句话说,你打破了代码。 很多代码。

即使您现在不编写库,也总是有可能在更一般的设置中重用某些代码。不要指望每一段代码都将保留在本地使用。

除此之外,没有什么大的动机可以为setter提供简单的语法,因为实际上很少需要setter。 Modern C ++致力于最大限度地减少对创建对象的更改。这使得更容易推断对象的状态,因此通常关于程序状态。这反过来又降低了复杂性,错误和维护。

答案 1 :(得分:0)

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