Форматирование классов C

#c #class #format

#c #класс #форматирование

Вопрос:

Является ли это общепринятым в качестве правильного форматирования для классов C ? Я видел так много разных форматов для того, как кодировать классы, пытаясь их изучить. Мне просто интересно, каков стандартный или «обычный» способ сделать это.

 class Circle
{
private:
    double radius;
public:
    Circle()
    {
        radius = 0.0;
    }
    Circle(double r)
    {
        radius = r;
    }
    // MEMBER
    void setRadius(double r)
    {
        radius = r;
    }
    double getArea()
    {
        return 3.14159 * radius * radius;
    }
};
  

Комментарии:

1. Не существует единого стандартного способа форматирования кода на C (или в большинстве других языков, если на то пошло). Существует множество способов форматирования кода на C ; единственными важными правилами являются (а) убедитесь, что код читаем и (б) убедитесь, что ваше форматирование является последовательным.

2. И он должен соответствовать остальной части кодовой базы, в которой вы работаете, какой бы глупой она ни была.

3. Если он компилируется правильно, то в значительной степени это правильная форма.

Ответ №1:

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

Ответ №2:

Обычно я бы помещал элементы внизу:

 class Circle {
public:
  Circle() {
    radius = 0.0;
  }

  Circle(double r) {
    radius = r;   
  }

  void setRadius(double r) {
    radius = r;
  }

  double getArea() {
    return 3.14159 * radius * radius;
  }

private:
  double radius;
};
  

Комментарии:

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

Ответ №3:

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

Комментарии:

1. 1, хотя, если вы пишете шаблонный класс, вы должны поместить их туда.

2. @Moo-Juice, вы все равно можете выполнять функции-члены шаблона вне класса, вам просто нужно повторить все имя шаблона, что немного раздражает. Но я делаю это довольно часто, в частности, для шаблонных функций-членов в классе, отличном от шаблона.

Ответ №4:

Не существует стандарта или формата.

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

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

Это мое личное предпочтение, надеюсь, я не буду опускаться -голоса за предпочтения:

 template<class T>   // template declaration if required
class myAwesomeClass
{
public:
    /*
     * Static stuff that is public goes here, oh and any type-definitions that are
     * also externally viewable
     */

private:

     /*
      * All my secret stuff
      */

protected:

     /*
      * My descendants can be decadent with this stuff, may they revel in the power
      */

public:
     /*
      * The rest of you guys get this
      */
}   // eo class myAwesomeclass, comment to determine the end of the definition
    // this can be useful if things are big!
  

Ответ №5:

Поскольку классы по умолчанию являются частными private: , ключевое слово после вашего первого { является излишним. Форматирование, которое я видел больше всего и которое имеет для меня смысл, — это public: then protected: then private: для порядка спецификатора доступа.