Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;运算符设置器ruby样式_C++_Ruby_Operators_Overloading_Setter - Fatal编程技术网

C++ C++;运算符设置器ruby样式

C++ C++;运算符设置器ruby样式,c++,ruby,operators,overloading,setter,C++,Ruby,Operators,Overloading,Setter,为什么人们不这样编码?红宝石风格 #include <stdio.h> class Name { public: void operator=(char *to) { name = to; printf("Change!\n"); } private: char *name; }; class Human { public: //char *na

为什么人们不这样编码?红宝石风格

#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);
}
#包括
类名{
公众:
void运算符=(字符*到){
name=to;
printf(“变更!\n”);
}
私人:
字符*名称;
};
阶级人{
公众:
//字符*名称;
姓名;
};
int main(){
人类安德烈亚斯=人类();
andreas.name=“andreas”;
printf(“%s\n”,andreas.name);
}
使用公共成员函数,直到需要向setter添加内容为止。然后将其切换到运算符为的类

使用公共成员函数,直到需要向setter添加内容为止。然后将其切换到运算符为的类

因为如果在您需要更改代码时,您的项目已经增长了百倍,现在您需要在许多不同的地方更改代码——如果您正在运送库,甚至可能在其他项目中

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

即使您现在不编写库,也有可能在更一般的环境中重用某些代码。不要指望每一段代码都能在本地使用

除此之外,根本没有大的动机为setter提供简单的语法,因为setter实际上很少需要。现代C++力求最小化对创建对象的更改。这样就更容易对对象的状态进行推理,从而对程序的总体状态进行推理。这反过来又减少了复杂性、bug和维护

使用公共成员函数,直到需要向setter添加内容为止。然后将其切换到运算符为的类

因为如果在您需要更改代码时,您的项目已经增长了百倍,现在您需要在许多不同的地方更改代码——如果您正在运送库,甚至可能在其他项目中

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

即使您现在不编写库,也有可能在更一般的环境中重用某些代码。不要指望每一段代码都能在本地使用


除此之外,根本没有大的动机为setter提供简单的语法,因为setter实际上很少需要。现代C++力求最小化对创建对象的更改。这样就更容易对对象的状态进行推理,从而对程序的总体状态进行推理。这反过来又减少了复杂性、bug和维护。

这样的开关会破坏接口,这是您通常想要避免的。

这样的开关会破坏接口,这是您通常想要避免的。

谁说他们不会呢?因为拥有公共数据成员违反了封装,例如,@Andrew这是在乞讨问题。@AndrewMarshall:像这样的绝对论的问题是,它们总是会有错误的例子。如果您有一个简单的数据类型,并且您知道永远不需要getter/setter,那么就将变量公开。在代码周围添加“属性”只会增加代码的膨胀。@Kaz区别恰恰在于–语法!当然,你不能说两者都是可读的…!他们绝对不是。对于一个极端的例子,考虑任何java代码(特别是GUI框架),并将其与C语言进行比较。如果你使用大量的访问器编写代码,语法更清晰是一个决定性的优势。谁说他们不这样做?因为拥有公共数据成员违反了封装,比如说。@Andrew这是个问题。@AndrewMarshall:像这样的绝对值的问题是,它们总是会出现错误的情况。如果您有一个简单的数据类型,并且您知道永远不需要getter/setter,那么就将变量公开。在代码周围添加“属性”只会增加代码的膨胀。@Kaz区别恰恰在于–语法!当然,你不能说两者都是可读的…!他们绝对不是。对于一个极端的例子,考虑任何java代码(特别是GUI框架),并将其与C语言进行比较。如果您使用大量访问器编写代码,那么更清晰的语法是一个决定性的优势。