Частные функции C++: следует ли передавать переменную-член класса по параметру функции или нет

Вот вопрос, который снова и снова возникает при реализации классов C++. Мне интересно, что здесь думают люди. Какой код вы предпочитаете и почему?

class A
{
public:
    /* Constructors, Destructors, Public interface functions, etc. */ 
    void publicCall(void);

private:
    void f(void);

    CMyClass m_Member1;
};

с

void A::publicCall(void)
{
    f();
}

void A::f(void)
{
    // do some stuff populating  m_Member1
}

Или альтернатива:

class A
{
public:
    /* Constructors, Destructors, Public interface functions, etc. */ 
    void publicCall(void);

private:
    void f(CMyClass &x);

    CMyClass m_Member1;
};

с

void A::publicCall(void)
{
    f(m_Member1);
}

void A::f(CMyClass &x)
{
    // do some stuff to populate x, 
    // locally masking the fact that it's really m_Member1
}

Я думаю, что всегда предпочитаю второй, потому что тогда fможет работать с любым экземпляром CMyClass, но , тем не менее, у меня есть много кода, где первый вариант вполне допустим, поскольку fбудет когда-либо работать только с m_Member1, и я действительно разбиваю его на две функции, чтобы сделать код более удобочитаемый.

Да, это скорее вопрос для обсуждения, чем вопрос «ответ», но меня больше интересует аргументация. Я отмечу как ответ ответ, который дает хорошее рассуждение или хороший критерий.

Кроме того, имейте в виду, что это всего лишь игрушечный пример. На самом деле класс будет больше, поэтому важна организация.

7
задан Chris A. 22 March 2012 в 19:13
поделиться