Какой смысл объявлять переменные в конце класса? - PullRequest
2 голосов
/ 14 мая 2010

Я видел несколько примеров в MSDN, который используется для объявления внутренних полей в конце класса. Какой смысл?

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

class A
{
  public A(){}
  // Methods, Properties, etc ...

  private string name;
}

class A
{
  private string name;

  public A(){}  
  // Methods, Properties, etc ...
}

Ответы [ 4 ]

3 голосов
/ 14 мая 2010

В C ++ имеет смысл поместить открытый интерфейс класса наверх, чтобы любой пользователь класса мог открыть ваш заголовочный файл и быстро увидеть, что доступно. Подразумевается, что защищенные и закрытые члены находятся внизу.

В C # и Java, где интерфейс и реализация полностью взаимосвязаны, люди, вероятно, не будут открывать исходный код вашего класса, чтобы посмотреть, что доступно. Вместо этого они будут полагаться на завершение кода или сгенерированную документацию. В этом случае порядок членов класса не имеет значения.

2 голосов
/ 14 мая 2010

Если очевидно, что переменная была объявлена, а код приведен в качестве примера, то, возможно, это поможет вам быстрее продемонстрировать немного - это все, о чем я могу думать.

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

1 голос
/ 22 ноября 2011

Многие программисты стремятся к самодокументируемому коду, который помогает клиентам понять его.В объявлении класса C ++ они будут переходить от наиболее важных (то есть, что, вероятно, наиболее часто проверяемых) к наименее важным:

class Class {
public:
    // First what interest all clients.

    static Class FromFoobar(float foobar); // Named constructors in client code
                                           // often document best

    Class();                               // "Unnamed" constructors.

    /* public methods */

protected:

    // This is only of interest to those who specialize
    // your class.

private:
    // Of interest to your class.
};

Основываясь на этом, если вы используете Qt, может быть интересен следующий порядок:

class SomeQtClass : public QObject {
public:
signals:       // what clients can couple on
public slots:  // what clients can couple to

protected:
protected slots:
};

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

Еще один бит, который мне нравится, - это использование спецификаторов доступа для визуального отделения поведения от данных.(следуя порядку важности, сначала поведение, потом данные, потому что поведение является основным интересом для разработчика классов):

class Class {
private:
    void foobar() ;

private:
    float frob_;
    int   glob_;
};

Сохранение последнего правила помогает предотвратить визуальное рассеяние компонентов класса (все мы знаемкак выглядят некоторые устаревшие классы с течением времени, когда переменные и функции перепутаны, а не?).

0 голосов
/ 14 мая 2010

Не думаю, что для этого есть веская причина. Если вы запустите Code Analysis для класса, объявленного таким образом, вы получите ошибку, поскольку частные поля должны быть объявлены поверх классов (и ниже констант).

...