Это меня очень смущает. Все примеры кода namespaceA
и namespaceB
, а имена методов foo()
и bar()
тоже не помогают. То, как все объясняют это, создает впечатление, будто пространства имен - это c до OOP времен, когда вы не могли бы сказать «классный автомобиль дает уровень топлива», но должны были go к этому из другого подхода. Но когда я хочу перейти на уровень C ++, в чем смысл использования пространств имен? Не то, чтобы заголовки уже достаточно сбивали с толку, пространства имен не имеют для меня абсолютно никакого смысла ни в том, как они работают, ни в том, зачем их использовать.
Допустим, у меня есть проект, построенный, например, на основе Traffic
. У вас были бы классы для Car
s и его компонентов, Driver
s и Passenger
s и Road
. Теперь Road
имеет Car
s, а каждый Car
имеет Person
s. Как бы это выглядело?
Были бы у вас пространства имен Road
, Car
, Person
? Будет ли main()
использовать пространство имен Road
для доступа к материалам в заголовке? Будет ли пространство имен Road
включать пространство имен Car
, а Car
включать пространство имен Person
, и будет ли через это main()
доступ к методам в Person
? Именно так объясняют это большинство руководств, но я не вижу в этом преимущества перед простым импортом файла заголовка, разве это не будет иметь такой же эффект?
Или вы бы поместили несколько заголовков в файл одно и то же пространство имен, например namespace Traffic
, со всеми этими классами? Можете ли вы вкладывать пространства имен?
Я знаю C# и никогда не знал, что у него есть пространства имен, пока я не посмотрел его только сейчас, и он никогда не нуждался, а в Java, Python и Dart они тоже никогда не подходил. Поскольку я пытаюсь научиться C ++, я сейчас как бы в затруднительном положении, задавая этот вопрос здесь. До сих пор я никогда не использовал их в C ++, но хочу выучить его как следует.