порядок функций в файле cpp - PullRequest
6 голосов
/ 07 августа 2009

есть ли стандарт в порядке функций в файле cpp?


есть:

  • глобальные функции
  • Конструкторы
  • деструкторов
  • добытчики
  • сеттеры
  • алгоритмические функции
  • если qt, слоты
  • если производный класс, переопределенные функции
  • статические функции
  • любой тип функции, который я не могу назвать ...

в файле cpp, есть ли хороший способ сделать заказ?

Я заказываю их, как я написал в списке выше.

я знаю, что это ничего не меняет, но мне важен красивый код ...

как вы заказываете?

Ответы [ 9 ]

11 голосов
/ 07 августа 2009

мой личный заказ дается заказом внутри объявления класса:

class MyClass 
{
public:
    MyClass();
    ~MyClass();

     void start();

protected:
     static void init(MyClass *);

private:
     int  m_iCounter;   ///< counter variable for....
};

будет выглядеть так в .cpp:

MyClass::MyClass() :
   m_iCounter(0)
{
   ...
}

MyClass::~MyClass() {
   ...
}

void MyClass::start() {
   ...
}

void MyClass::init(MyClass *) {
    ...
}

Порядок определяется следующим образом:

  1. Конструкторы + Деструкторы
  2. (только для проектов Qt :) signals
  3. публичные методы - упорядочены по важности, например, сначала идут start() и stop(), затем геттеры и сеттеры
  4. методы, упорядоченные по важности
  5. защищенные члены
  6. частные методы
  7. частные пользователи

Надеюсь, это поможет.

чао, Chris

4 голосов
/ 07 августа 2009

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

Последнее приходит любым частным "вспомогательным" методом.

Я использую этот же подход во всех языках ... (C ++, Java, C #, Perl, sh и т. Д.), И никто на самом деле меня не застрелил (пока).

Приветствия. Кит.

3 голосов
/ 07 августа 2009

Это гораздо менее важно, чем раньше. Все приличные IDE в наши дни имеют (или должны иметь) возможность перейти к определению или ссылке щелчком правой кнопки мыши или другим простым жестом. Поиск по коду - пустая трата времени.

Я обычно заказываю их: Конструктор Destructor Какой бы заказ я ни реализовал, остальное

Затем я возвращаюсь и группирую логические / связанные функции вместе

Возможно, более важно сгруппировать связанные вещи / упорядочить вещи в файле заголовка для удобства чтения, чем в файле cpp.

3 голосов
/ 07 августа 2009

Я привык делать заказы с платформы Symbian, где порядок:

  • публичные, защищенные, приватные методы
  • публичные, защищенные, приватные переменные

Причиной этого были правила расширения уже выпущенных интерфейсов для обратной совместимости. Поскольку наиболее вероятная вещь, которую нужно добавить, это закрытая переменная, они помещаются в конец класса, так что добавление новой не изменит расположение других переменных в классе. Вещи, которые изменяют интерфейс, затем располагаются перед этим в порядке «public, protected». Затем порядок копируется для методов класса, хотя они не изменят расположение в памяти каких-либо переменных в экземпляре класса.

И не спрашивайте о рекомендациях для виртуальных функций;)

2 голосов
/ 07 августа 2009

Стандарт нашей компании:

  1. Конструкторы
  2. деструкторов
  3. публичные методы (отсортированные по алфавиту)
  4. частных меторов (отсортировано по алфавиту)
2 голосов
/ 07 августа 2009

От самого важного к низшему:

  • Частные переменные (не шучу, они раскрывают большую часть внутренней работы вашего класса)
  • Конструкторы
  • Публичные методы
  • Защищенные методы
  • Частные методы

Сами методы должны быть упорядочены по их «уровню абстракции»: более высокий уровень: вверх, более низкий уровень: вниз, другими словами, структурируйте свои методы так, чтобы они вызывали только методы ниже.

2 голосов
/ 07 августа 2009

Внутри класса нет строгих правил по языку. За пределами класса вам нужно убедиться, что объявление предшествует определению, когда они разделены.

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

1 голос
/ 07 августа 2009

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

1 голос
/ 07 августа 2009

Я использую свою IDE, чтобы перейти к функциям в моем cpp-файле, и он упорядочивает их в алфавитном порядке, или я выполняю поиск, и при поиске во время ввода это очень быстро.

Так что для меня нет абсолютно никакой разницы в рабочем процессе в зависимости от порядка функций в файле .cpp ...

...