Различие между классами и пространствами имен?

Я смотрю на пространства имен, и я действительно не вижу различия между ними и классами. Я преподаю мне C++, я получил несколько книг онлайн, таким образом, я знаю, что не учусь наиболее эффективно. Так или иначе кто-то может сказать мне различие между двумя и каково было бы наилучшее время для использования namepace по классу. Кроме того, я не вижу много о структурах в книге, которую я читаю.

Действительно ли это - формат?

struct go
{

  goNow(){ cout << "go Now"};

}

заранее спасибо за Вашу помощь.

36
задан PythonJin 18 January 2015 в 17:51
поделиться

6 ответов

Классы и структуры определяют типы. Вы можете создать объект типа. Пространства имен просто объявляют область, внутри которой могут существовать другие типы, функции, объекты или пространства имен. Вы не можете создать объект типа std (если, конечно, вы не создали тип с именем std , который скроет пространство имен std ).

Когда вы определяете функцию внутри структуры / класса (метода), вы говорите: «Эта функция является фундаментальной операцией над связанными данными». Когда вы определяете функцию внутри пространства имен, вы говорите: «Эта функция логически связана с другими функциями, типами и объектами в пространстве имен»

Редактировать

Вероятно, стоит отметить, что языки «все является объектом» например, Java и C # регулярно используют классы, как если бы они были пространствами имен, потому что они не допускают «бесплатных» функций. Это может быть причиной путаницы. Если у вас есть класс на другом языке, который не содержит ничего, кроме статических членов, вы можете использовать пространство имен и бесплатные функции в версии C ++.

68
ответ дан 27 November 2019 в 05:14
поделиться

Одно из основных отличий состоит в том, что пространства имен можно открывать повторно, но классы не могут быть:

namespace A {
    int f1();
}

namespace A {
    int f2();
}

разрешено, но:

class A {
    int f1();
};

class A {
    int f2();
};

не

7
ответ дан 27 November 2019 в 05:14
поделиться

Класс - это тип данных. Если у вас есть класс с именем Foo , вы можете создавать объекты класса Foo и использовать их разными способами.

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

Если вы пишете код, который хотите связать с объектом , который вы можете определить и использовать в качестве переменной, напишите класс . Если вы пишете API или библиотеку и хотите обернуть все функции и константы, чтобы их имена не противоречили тому, что мог написать пользователь, используйте пространство имен .

11
ответ дан 27 November 2019 в 05:14
поделиться

Пространство имен - это способ группировки идентификаторы, чтобы они не конфликтовали.

Класс - это определение объекта, который может быть создан (обычно) и который инкапсулирует функциональность и состояние.

Пространства имен и классы совершенно разные и служат разным целям. У них есть некоторое синтаксическое сходство.

Структуры - это классы с разными спецификаторами доступа по умолчанию (public для структуры, private для класса) - во всех других аспектах они одинаковы.

8
ответ дан 27 November 2019 в 05:14
поделиться

Вы можете поискать в Интернете различия, и я уверен, что вы найдете их много; но IMHO важно следующее: -

  • Вы можете повторно открыть пространство имен и добавить материал в единицах перевода. Ты не может этого сделать с классами.
  • Использование класса подразумевает, что вы можете создать экземпляр этого класса, а не истина с пространствами имен.
  • Вы можете использовать-объявления с пространства имен, и это невозможно с классами, если вы не производите от них.
  • У вас могут быть безымянные пространства имен.

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

26
ответ дан 27 November 2019 в 05:14
поделиться

Из википедии

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

С другой стороны Класс определяет тип .

Пространство имен может содержать несколько классов.

РЕДАКТИРОВАТЬ

Одно отличие будет заключаться в следующем:

Вы можете иметь безымянные пространства имен, но не можете иметь безымянный класс

    namespace{    //fine

           //some code....
    }

    class{   //illegal
    }
0
ответ дан 27 November 2019 в 05:14
поделиться
Другие вопросы по тегам:

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