【发布时间】:2012-03-29 08:51:55
【问题描述】:
为什么人们不这样编码?红宝石风格!
#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= 的类。
【问题讨论】:
-
谁说没有?
-
因为拥有公共数据成员违反了封装,例如。
-
@Andrew 这是在乞求问题。
-
@AndrewMarshall:像这样的绝对值的问题是总会有错误的实例。如果您有一个简单的数据类型,并且您知道永远不需要 getter/setter 将变量公开。在它周围添加“属性”只会给你的代码增加膨胀。
-
@Kaz 区别恰恰在于——语法!当然,您不能争辩说两者都具有同等的可读性……!他们绝对不是。举一个极端的例子,考虑任何 Java 代码(尤其是 GUI 脚手架),并将其与例如C#。如果您使用大量访问器进行编码,则具有更清晰的语法是决定性的优势。
标签: c++ ruby operators overloading setter