Можно определить несколько классов в один.cpp файл?
Я работаю над проектом для школы, и инструктор настаивает, чтобы весь код был в одном.файл cpp (для облегчения сортировки с его стороны). Я хотел бы определить несколько классов в этом файле. Будут ли у меня проблемы при этом?
11 ответов
нет правила, которому вы должны следовать (как в java). Вы можете размещать и называть классы в именованных файлах, которые вам нравятся (кроме суффикса).
однако его другой вопрос, если это хорошая практика (его нет!).
Да, вы можете. Это легко проверить.
class C
{
};
class D
{
};
int main(int argc, char**argv)
{
return 0;
}
вы можете отлично иметь несколько классов, объявленных и определенных в одном файле.
вы должны быть осторожны, когда класс зависит от другого, который приходит позже. Если класс A должен быть членом другого класса B, компилятору необходимо его полное объявление (чтобы он знал его размер), и вам нужно поместить его выше в файл. Если этот член является только указателем (который имеет размер, независимый от размера указанного класса), простое прямое объявление достаточно указать на класс.
обратите внимание, что с #include
механизм, это в значительной степени то, что происходит в любом случае: препроцессор будет "копировать-вставлять" все включенные файлы в компилируемый файл. Для компилятора это одно и то же.
Как правило, вы должны поместить только несколько классов в один файл if...
классы очень тесно связаны. Например, если класс определяет свой собственный итератор, то может быть целесообразно поместить этот класс итератора в тот же файл, что и класс, который он использует для итерации.
один из классов предназначен для общественного потребления, а остальные классы используются для ее реализации. Например, это будет применяться, если вы используете идиому "pimpl, где единственным членом, который содержит открытый класс, является указатель на закрытый класс. В этом случае может быть целесообразно поместить частные/скрытые классы в исходный файл, соответствующий общедоступному классу, который их использует.
в обоих случаях решение о том, помещать ли классы" public helper "(например, iterator) и" private helper " (например, pimpl) в один и тот же исходный файл или другой исходный файл, должно быть сделано один раз для всего проекта и следовать последовательно.
У вас не будет никаких проблем с определением нескольких классов в одном файле.
Это не особенно хорошая практика для производственных систем, но это не проблема для домашнее задание
Да, вы можете. Это должно поддерживаться, поскольку в противном случае вы не сможете создавать вложенные классы.
class outside
{
public:
class nested
{
public:
static int x;
static int y;
int f();
int g();
};
};
вопрос исходит из исходного представления стиля java/C#. В C++ макет исходного кода очень отличается. Один исходный блок / "cpp-файл" / может обрабатывать столько деклараций, сколько вы хотите поместить. Однако это не обязательно хорошая стратегия, так как в какой-то момент вам нужно рассказать другим классам, как обращаться с вашими классами. В C++ класс может иметь разделенные определение и объявление, и вы можете поместить их в разные файлы. Определение класса используется совместно другими исходными файлами с операторами #include, поэтому эти классы можно использовать в любом сценарии, где требуется определение. Если вы имеете дело с классами, которые используются только в одном исходном файле, вы можете скрыть его прямо в исходных файлах, но если вы хотите подключить их к другим классам, вам нужно поместить определение в файл заголовка.
Это может помочь вам улучшить скорость компиляции - особенно если вы используете предварительно скомпилированные заголовки, но caresully, потому что pch-s не являются частью стандарта C++, и каждый компилятор обрабатывает их по-разному! - и гибкость вашего кода. Ваш учитель должен знать об этих фактах...