требуется диспетчер пространств имен или xsltcontext



Автор Грешник чОрный задал вопрос в разделе Другие языки и технологии

вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю)) и получил лучший ответ

Ответ от ?????? Зелёный змий ??????[гуру]
В принципе любая пара скобочек {} определяет пространство имен. Любые переменные объявленные в этом пространстве не будут видны из другого места. Так было еще в просто СИ, но в нем не было такого понятия "пространство имен". Вместо этого использовалось понятие "область видимости переменной". В С++ появилось namespace - пространство имен. Для того чтобы глобальное пространство имен распилить на независимые зоны во избежание конфликтов имен переменных и функций. При этом к памяти, как утверждает предыдущий постер, это никакого отношения не имеет. Это нужно компилятору чтобы не путать одни сущности с другими.
Например
namespace foo
{
int Var; // глобальная переменная
void Func(int Var); // функция
}
namespace ess
{
int Var; // глобальная переменная
void Func(int Var); // функция
}
Несмотря на то что разные переменные и функции названы одинаково, компилятор их никогда не перепутает, потому что они лежат в разных пространствах имен. Доставать их следует используя имя пространства.
foo::Var; // переменная из одного пространства
ess::Var; // переменная из другого пространства
В функциями так же. Если страдаете ленью и не хочется лишний раз писать спецификатор имени, то можно воспользоваться директивой using namespace foo; Тогда компилятор будет знать, что имена нужно искать не только в глобальном пространстве, но и в указанном.
Если указать список пространства (как в примере)
using namespace foo;
using namespace ess;
Тогда уже можно запутать компилятор, он найдет в обоих пространствах нечто подходящее, а что требуется вам - уже не понятно. Так что директивой using namespace нужно тоже пользоваться аккуратно (либо не пользоваться без необходимости) .
Впрочем можно указать не все пространство имен, а только его часть.
using namespace foo::Func;
namespace открыты и расширяемы. Открыты - значит, что ко всему что определено в них можно получить доступ из другого места.
Расширяемы - значит что содержимое пространства имен не обязательно должно быть в одном файле, и всегда пространство имен можно чем нибудь дополнить.
namespace foo
{
int Var2; // другая глобальная переменная, которую добавили в уже существующее пространство
}
Но есть еще анонимные пространства имен. Они просто не содержат имени. С ними все наоборот
// file.cpp
namespace
{
/*
Все определенное здесь будет видно только в пределах этого файла,
и больше нигде не засветиться
*/
int Var;
} // namespace end
void fun()
{
Var = 50; // залезли в анонимный namespace
}
При объявлении класса автоматически образуется пространство имен, но уже со своей спецификой. Оно не расширяемо, т. е. его начинка определяется только тем, чтобы объявлено в классе. И с помощью директив public, protected, private можно регулировать доступ к отдельным его элементам.

Ответ от Ildar[гуру]
Пространство имен - это область памяти, в которой сосредоточены определенные данные (переменные, классы и т. д.). Без объявления этого же пространства имен в коде невозможно использовать эти данные в программе. Придуманы эти пространства, чтобы отгородить определенные данные от данных других пространств, чтобы их не путать.
Например, есть пространство имен std, где сосредоточены такие вещи cout, cin,string,vector и т. д. , то есть стандартные данные языка. Мы говорим компилятору, что будем использовать это пространство через команду using namespace std;.Чтобы определить свое пространство имен, используем след. синтаксис:
namespace имя{
//тут твои данные
}
Затем объявляем его в программе:
using namespace имя;
Либо используем данные след. образом:
//пример
cout << имя:: переменная << endl;
имя:: функция (а, б) ;
Вот как то так
В общем пространства имен нужны, чтобы не путать данные одного пространства с другими, как бы "разграничать"их. Допустим у тебя в исходном коде определены две ф-ции с одним названием, но в разных пространствах. И ты можешь использовать их обоих, т. к. компилятор различит их по пространствам, которым они принадлежат.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: вопрос по С++. объясните что такое пространство имен? зачем нужны.. как юзаются... и тд.. а то я вообще не врубаю))

что такое пространство имен и зачем оно нужно
Для обеспечения групповой работы над программами. Сотрудники, работающие над разными частями
подробнее...

Error C2065: cout: необъявленный идентификатор
std::endl вместо endl

либо объявите явно использование пространства имен std в своей
подробнее...
спросили в Троллинг Херне
Информация о системе и железе в C#
> ..
> Нарушение! Нарушение! Подарить стикер! NEW
> >>какое пространство
подробнее...
спросили в STW
Что такое "std::" в с++. Например, std::cout <<
Здесь две сущности std - пространство имен и :: - Оператор разрешения области видимости.подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:

Что такое тангаж у самолета?!
Угол тангажа характеризует положение самолета в пространстве. Именно этот угол летчик видит глядя
подробнее...

Как в java подключить свой класс?
import [пространство имен]. [твой класс] ;

Пример
import java.util.Date;подробнее...
спросили в Кодировки
как перекодировать текст из одной кодировки в другую? C#
Для того чтобы переводить строки из одной кодировки в другую существует класс Encoding из
подробнее...

Как стандартные потоки ввода - вывода C++ cin и cout сделать доступными в Linux?
#include<iostream>
using namespace std;

И будет тебе счастье.. .
Дело в том,
подробнее...

mscorlib.dll
System.Math поставляеся вместе со студей и не трубуем дополнительно определять пространства имен
подробнее...

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

История полуфабрикатов. Что такое полуфабрикаты?
Наверное, первый вопрос, который интересует желающего приобрести и впоследствии съесть какой-то
подробнее...

Где можно достать летающую метлу? Я серьезно
- Инструкция
1.Вполне очевидно, что способов добиться этого существует не так уж и много,
подробнее...

Статические поля и методы в С++. Подскажите что это и примеры если можно. Гугл затерялся в своих знаниях)
Статические переменные не входят в состав объекта. Они существуют в единственном экземпляре,
подробнее...
Пространство имён программирование на Википедии
Посмотрите статью на википедии про Пространство имён программирование
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*