Законное или неправильное использование члена значения члена класса? - PullRequest
0 голосов
/ 25 октября 2019

**** РЕДАКТИРОВАТЬ *** после нескольких комментариев, подтверждающих мое собственное мнение, основанное на догадке (передать в качестве аргумента)

то, что мне действительно нужно, - это рекомендации относительно того, что следует или не следует использоватьЧлены класса **** РЕДАКТИРОВАТЬ ***

Скажите, что Пример класса имеет несколько открытых функций

   class Example
   {
   public:
      A(int x);
      G();
      H();
      Z();
   private:
      B();
      C();
      D();
      E()
   }

A вызывается и делает вызовы A-> B-> C->D-> Е. в функции E нам нужно использовать параметр X, который мы получили в A, но B, C, D не имеет к этому никакого отношения.

один вариант - сохранить int x в качестве члена класса и затем получить его в E. другой способ - передать его через B-> CD-> E. в качестве аргумента.

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

пытался Google для того, что является законным использованием ученика, но ничего не нашел.

мне кажется, что член в oopальтренативная плохая практика использования глобалов.

где я могу найти мнения или данные о нем?

я использую c ++

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

другой способ - передать его через B-> CD-> E. в качестве аргумента.

Этот параметр имеет большой смысл.

Если требуется Eаргумент, то он должен принять аргумент. Если D вызывает E, то D должен предоставить этот аргумент. Если D не может предоставить одно иное, то ему также необходимо принять этот аргумент и так далее. Я рекомендую такой подход.

, по моему мнению, хранение его в качестве члена является плохой практикой, поскольку оно не имеет ничего общего с состоянием класса или данными

Это разумное обоснование.

Также рассмотрите, относятся ли все эти функции к самому объекту. Если нет, то они, вероятно, должны быть статическими членами или даже свободными функциями.

0 голосов
/ 25 октября 2019

Судя по интерфейсу A, x не кажется присущим классу. Следовательно, не имеет смысла хранить его как переменную-член класса.

Если это необходимо E, он должен получить его в качестве аргумента функции.
Если Dему нужно вызвать E с ним, ему нужно получить его в качестве аргумента функции.
Итак ...

Я думаю, что ваш лучший вариант - передать x вместе с A() до E().

class Example
{
  public:
    A(int x);
    G();
    H();
    Z();
  private:
    B(int x);
    C(int x);
    D(int x);
    E(int x);
};
...