C++类设计:成员和局部变量

jah*_*aho 1 c++ variables class-design class

以下两个示例之间是否有任何区别,应该优先于其他两个示例:

例1:

class A
{
    int i;
    B* b;

    do_something();
    do_something_else();
}

A::do_something()
{    
    do_something_else();
}
Run Code Online (Sandbox Code Playgroud)

例2:

class A
{
    int i;

    do_something()
    do_something_else(B* b)
}

A::do_something()
{
    B* b;
    do_something_else(b);
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说使用几种方法b是否更好地将它们作为参数或不带参数并使用成员变量?两种方法之间的性能有差异吗?我可以看到两者的好处,但哪一个更受青睐?

And*_*rew 12

如果变量属于您正在设计的对象,则使它们成为成员.如果你只使用临时变量 - 不要让它们成为成员,因为在这种情况下你只会污染你的对象设计


Com*_* 10 8

这实际上归结为对象模型如何组合在一起以及聚合关系是否准确地表示您希望建模的内容.

想想B在你的情况下是否真的表现出与之关系A(也就是说它A 有a-a B?)例如,在大多数情况下,汽车有一个发动机,所以发动机可以合理地拥有/包含一辆车.如果是这种情况,那么您应该使用示例1.

另一方面,如果没有直接的关系,A只需要在不拥有它或包含它的情况下对另一个对象采取行动,那么你应该坚持使用示例2.例如:

Dog myDog;
Stick aStick;
myDog.fetches(aStick);
Run Code Online (Sandbox Code Playgroud)

很明显,一根棍子(希望)不是狗的一个组成部分.

为了方便起见,将变量(特别是指针)合并到类中并使代码看起来更好(即因为您不必传递这么多参数),但是如果包含的对象与容器没有很强的关系,那么很有吸引力和/或在其他地方进行管理,您经常遇到复杂的生命周期管理问题,这些问题可以抵消您首先从聚合中获得的好处.