Действительно ли возможно определить несколько классов во всего одном .cpp файле?

Lucida Console не так хорош, потому что полужирный текст поднимает больше комнаты, чем неполужирный текст. Consolas преодолевает это.

9
задан RED SOFT ADAIR 7 December 2009 в 17:55
поделиться

11 ответов

Нет правила, которому вы должны следовать (как в java). Вы можете размещать и называть классы в файлах с любым именем (кроме суффикса).

Однако другой вопрос, если это хорошая практика (это не так!).

29
ответ дан 4 December 2019 в 05:52
поделиться

Да, можно. Это легко проверить.

class C
{
};

class D
{
};

int main(int argc, char**argv)
{
  return 0;
}
10
ответ дан 4 December 2019 в 05:52
поделиться

Нет проблем с записью нескольких классов в один файл. Это только вопрос стиля обслуживания.

6
ответ дан 4 December 2019 в 05:52
поделиться

Обычно вы должны помещать несколько классов в один файл, только если ...

  1. Классы очень тесно связаны. Например, если класс определяет свой собственный итератор, то было бы целесообразно поместить этот класс итератора в тот же файл, что и класс, который он использовал для итерации.

  2. Один из классов предназначен для публичного использования, а остальные классы используются для его реализации. Например, это применимо, если вы используете идиому «pimpl», где единственный член, который содержит открытый класс, является указателем на частный класс. В этом случае может оказаться целесообразным поместить частные / скрытые классы в исходный файл, соответствующий общедоступному классу, который их использует.

В обоих случаях решение о том, следует ли помещать «общедоступный помощник» (например, итератор) и «частный помощник» (например, pimpl) классы в том же исходном файле или другом исходном файле должны быть созданы один раз для всего проекта и выполняться последовательно.

5
ответ дан 4 December 2019 в 05:52
поделиться

Просто масштабируемость / проблемы с ремонтопригодностью;) Здесь нет строгих правил.

3
ответ дан 4 December 2019 в 05:52
поделиться

Нет. Вы не столкнетесь с неприятностями. В C ++ вы можете определить несколько классов внутри одного файла.

3
ответ дан 4 December 2019 в 05:52
поделиться

Да, можно. Это должно поддерживаться, потому что в противном случае вы не сможете создавать вложенные классы.

class outside
{
public:
      class nested
      {
      public:
            static int x;
            static int y;
            int f();
            int g();
      };
};
3
ответ дан 4 December 2019 в 05:52
поделиться

У вас не возникнет проблем с определением нескольких классов в одном файле.

Это не очень хорошая практика для производственных систем, но это не проблема для домашнего задания

3
ответ дан 4 December 2019 в 05:52
поделиться

Вы можете легко объявить и определить несколько классов в одном файле.

Вы должны быть осторожны, когда класс зависит от другого, который появится позже. Если класс A должен быть членом другого класса B, компилятору необходимо его полное объявление (чтобы он знал его размер), и вам нужно поместить его выше в файле. Однако, если этот член является просто указателем (размер которого не зависит от размера указанного класса), достаточно простого прямого объявления указанного класса.

Обратите внимание, что с #include , это почти то, что происходит в любом случае: препроцессор «копирует-вставляет» все включенные файлы в компилируемый файл. Для компилятора это то же самое.

6
ответ дан 4 December 2019 в 05:52
поделиться

Вопрос исходит из исходного представления стиля java / C #. В C ++ макет исходного кода сильно отличается. Один исходный модуль / "файл cpp" / может обрабатывать столько объявлений, сколько вы хотите вставить. Однако это не обязательно хорошая стратегия, так как в какой-то момент вам нужно сказать другим классам, как обращаться с вашими классами. В C ++ класс может иметь отдельные разделы определения и объявления, и вы можете размещать их в разных файлах. Определение класса совместно используется другими исходными файлами с помощью операторов #include, поэтому вы можете использовать эти классы в любом сценарии, где требуется определение. Если вы имеете дело с классами, которые используются только в одном исходном файле, вы можете скрыть его прямо в исходных файлах, но если вы хотите связать их с другими классами, вам нужно поместить определение в файл заголовка.

Это может помочь вам улучшить скорость компиляции - особенно если вы используете предварительно скомпилированные заголовки, но осторожно, потому что pch-s не являются частью стандарта C ++, и каждый компилятор обрабатывает их по-своему! - и гибкость вашего кода. Ваш учитель должен знать об этих фактах ...

2
ответ дан 4 December 2019 в 05:52
поделиться

Да, вы могли бы сделать это без проблем. либо несколько классов, либо вложенный класс.

2
ответ дан 4 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: