成员变量好,还是函数参数好

iverry 2007-07-06 03:45:50
1)class Clothing{...}
2)class Person1
{
private Clothing cloth;
public void PutOn(){...};
}
3)class Person2
{
public void PutOn(Clothing cloth){...}
}

以上这种2),3)两种的类的定义,实在不好把握,感觉作为成员变量与作为函数参数都是不错的选择。一直困恼很久。
这两种设计有什么不同呢?

大家在设计类时,针对这种情形,采取什么样的原则,什么样的理由呢?
...全文
548 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyGou 2007-07-08
  • 打赏
  • 举报
回复
嘿嘿...
晨星 2007-07-08
  • 打赏
  • 举报
回复
“偶尔也可以用cpp文件中匿名namespace里的变量实现(相当于文件域的全局变量)”
——这句去掉,没看清是在JAVA版,嘿嘿。:P
晨星 2007-07-08
  • 打赏
  • 举报
回复
偶也倾向于orangemike(纯学习)所说的,关键看类的设计。
是类的内部状态就肯定要用成员变量来实现,不是类的内部状态最好作为函数参数,偶尔也可以用cpp文件中匿名namespace里的变量实现(相当于文件域的全局变量
)。
一个对象本身应该仅仅持有那些能把它自身跟同一类的其它对象区分开来的足够状态信息就可以了(有时一些为了纯性能问题而考虑的cache成员除外)。
比如,一个字符串因,它的字符缓冲区肯定应该做为成员变量,因为对一个字符串来说,它里面的字符是最基本的状态信息。而比较一个字符串时所需要考虑的那些因素,比如比较的开始位置,是否考虑大小写等,则应该作为函数的参数,因为这些显然不该是字符串的内部状态。
gaohua027 2007-07-08
  • 打赏
  • 举报
回复
orangemike(纯学习) :分析有道理
晨星 2007-07-08
  • 打赏
  • 举报
回复
作用域当然不相同,但楼主可能是觉得如果用成员变量,函数写起来和用起来就会简洁些。

不过,如果楼主发现除非都做成成员变量,否则某个类的成员函数总是需要带有好多参数,那很可能说明楼主的程序需要抽象出更多的类和对象来了。
huoyin 2007-07-08
  • 打赏
  • 举报
回复
这两种方式所定义的变量作用域并不相同,相对是比较容易做出抉择的吧。

第一种方式将其定义为类的作用域,也就是说类的其他函数或许会引用该变量。

第二种方式将其定义为方法的作用域,也就是说类的其他函数不会引用该变量,该变量的只能被该方法使用。
iverry 2007-07-07
  • 打赏
  • 举报
回复
原则:有外部引用的时候需要参数传递,没有外部引用的时候一律用成员变量.理由:类安全

To:九天玄狐,你的这句话我还是没能理解,能讲具体,或者举个例子吗??谢谢!!
mimanginging 2007-07-07
  • 打赏
  • 举报
回复
学习
orangemike 2007-07-06
  • 打赏
  • 举报
回复
从LZ提问的方式,我感觉你把这个当作一个技巧性问题提的,其实这个问题是个面向对象的思想问题。把Clothing当作属性或者方法参数,是有本质区别的,关键是要看你的实际应用的对象模型是怎么建立的。如果在你的模型里,一个人只需要有手有脚即可,至于他穿什么衣服,别的类都不会在意,只是在某个场景里,put一下Clothing显摆一下就行,那么你肯定只需要把它做为一个方法参数就行了。但是如果你的模型里还有个party类要求检查参加party的person的衣服,不是礼服不能参加,那你肯定把Clothing作为person的属性比较好。其实意思和“九天玄狐”说的差不多。
网络咖啡 2007-07-06
  • 打赏
  • 举报
回复
尽量缩小变量的作用域
zephyr_cc 2007-07-06
  • 打赏
  • 举报
回复
Person和Clothing这两个类对应的事物的关系来讲,还是3)好点.

如果把Clothing作为Person的成员,那么任何东西都可以作为Person的成员,TV,House...
但是Clothing这个类改变了,并不会影响到Person这个类.Clothing不是Person必须的一部分.

如果是Arm和Person的关系,把Arm这个类作为Person的成员更合适,
Arm这个类运作方式改变了,他会影响到Person.

个人感觉
ylh2003 2007-07-06
  • 打赏
  • 举报
回复
Clothing这个类要是只有public void PutOn()自己用的话使用传参数的方法好

要是Clothing要是有多个方法要用的话还是private Clothing cloth通过setCloth()设置一下比较好
weihthchk 2007-07-06
  • 打赏
  • 举报
回复
除了九天玄狐的说法外,还有一点:代码的可读性。
像你的这个例子,应该同时保有成员变量和函数参数,在阅读的时候可以看到——
void putOn(Clothing c)的调用后,成员变量变为putOn的参数。
这样可以符合人的思维习惯,理解起来会较为容易。

话说面向对象的开发形式很大程度上就是图这个。
dracularking 2007-07-06
  • 打赏
  • 举报
回复
我觉得这两种没有大冲突,参数传进去多半还是要赋给成员变量的,和直接用set 方法没大区别
zxh2208180 2007-07-06
  • 打赏
  • 举报
回复
原则:有外部引用的时候需要参数传递,没有外部引用的时候一律用成员变量.理由:类安全
KingNE 2007-07-06
  • 打赏
  • 举报
回复
看实际需求了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧