Подтвердить что ты не робот

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

Я смотрю на пространства имен, и я не вижу разницы между ними и классами. Я учу себя С++. У меня есть несколько книг в Интернете, поэтому я знаю, что не изучаю наиболее эффективно. В любом случае, кто-то может сказать мне разницу между ними и лучшее время для использования пространства имен над классом. Кроме того, я не очень разбираюсь в структурах книги, которую я читаю.

Это формат?

struct go
{

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

}

заблаговременно за помощь.

4b9b3361

Ответ 1

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

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

Edit

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

Ответ 2

Вы можете искать в Интернете различия, и я уверен, что вы найдете много; но важны ИМХО: -

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

Ответ 5

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

namespace A {
    int f1();
}

namespace A {
    int f2();
}

является законным, но:

class A {
    int f1();
};

class A {
    int f2();
};

не

Ответ 6

Из википедии

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

С другой стороны A class defines a type.

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

ИЗМЕНИТЬ

Одно из отличий:

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

    namespace{    //fine

           //some code....
    }

    class{   //illegal
    }