1)class Clothing{...}
2)class Person1
{
private Clothing cloth;
public void PutOn(){...};
}
3)class Person2
{
public void PutOn(Clothing cloth){...}
}以上这种2),3)两种的类的定义,实在不好把握,感觉作为成员变量与作为函数参数都是不错的选择。一直困恼很久。
这两种设计有什么不同呢?大家在设计类时,针对这种情形,采取什么样的原则,什么样的理由呢?
2)class Person1
{
private Clothing cloth;
public void PutOn(){...};
}
3)class Person2
{
public void PutOn(Clothing cloth){...}
}以上这种2),3)两种的类的定义,实在不好把握,感觉作为成员变量与作为函数参数都是不错的选择。一直困恼很久。
这两种设计有什么不同呢?大家在设计类时,针对这种情形,采取什么样的原则,什么样的理由呢?
像你的这个例子,应该同时保有成员变量和函数参数,在阅读的时候可以看到——
void putOn(Clothing c)的调用后,成员变量变为putOn的参数。
这样可以符合人的思维习惯,理解起来会较为容易。话说面向对象的开发形式很大程度上就是图这个。
但是Clothing这个类改变了,并不会影响到Person这个类.Clothing不是Person必须的一部分.如果是Arm和Person的关系,把Arm这个类作为Person的成员更合适,
Arm这个类运作方式改变了,他会影响到Person.个人感觉
是类的内部状态就肯定要用成员变量来实现,不是类的内部状态最好作为函数参数,偶尔也可以用cpp文件中匿名namespace里的变量实现(相当于文件域的全局变量
)。
一个对象本身应该仅仅持有那些能把它自身跟同一类的其它对象区分开来的足够状态信息就可以了(有时一些为了纯性能问题而考虑的cache成员除外)。
比如,一个字符串因,它的字符缓冲区肯定应该做为成员变量,因为对一个字符串来说,它里面的字符是最基本的状态信息。而比较一个字符串时所需要考虑的那些因素,比如比较的开始位置,是否考虑大小写等,则应该作为函数的参数,因为这些显然不该是字符串的内部状态。
——这句去掉,没看清是在JAVA版,嘿嘿。:P