Рубрики

Пространство имен в C ++ | Комплект 1 (Введение)

Рассмотрим следующую программу C ++.

// Программа для демонстрации необходимости пространства имен

int main()

{

    int value;

    value = 0;

    double value; // Ошибка здесь

    value = 0.0;

}

Выход :

Compiler Error:
'value' has a previous declaration as 'int value'

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

// Здесь мы видим, что более одной переменной
// используются без сообщения об ошибке.
// Это потому, что они объявлены в
// разные пространства имен и области.
#include <iostream>

using namespace std;

  
// Переменная, созданная внутри пространства имен

namespace first

{

    int val = 500;

}

  
// Глобальная переменная

int val = 100;

  

int main()

{

    // Локальная переменная

    int val = 200;

  

    // Эти переменные доступны из

    // вне пространства имен с использованием области видимости

    // оператор ::

    cout << first::val << '\n'

  

    return 0;

}

Выход:

500

Определение и создание:

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

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

Определение пространства имен начинается с ключевого слова namespace, за которым следует имя пространства имен следующим образом:

namespace namespace_name 
{
   int x, y; // code declarations where 
             // x and y are declared in 
             // namespace_name's scope
}
  • Объявления пространства имен появляются только в глобальной области видимости.
  • Объявления пространства имен могут быть вложены в другое пространство имен.
  • Объявления пространства имен не имеют спецификаторов доступа. (Публичный или частный)
  • Не нужно ставить точку с запятой после закрывающей скобки определения пространства имен.
  • Мы можем разделить определение пространства имен на несколько единиц.

// Создание пространств имен
#include <iostream>

using namespace std;

namespace ns1

{

    int value()    { return 5; }

}

namespace ns2 

{

    const double x = 100;

    double value() {  return 2*x; }

}

  

int main()

{

    // Доступ к функции значения в ns1

    cout << ns1::value() << '\n'

  

    // Доступ к функции значения в ns2

    cout << ns2::value() << '\n'

  

    // Доступ к переменной x напрямую

    cout << ns2::x << '\n';       

  

    return 0;

}

Выход:

5
200
100

Классы и пространство имен:

Ниже приведен простой способ создания классов в пространстве имен.

// Программа на C ++ для демонстрации использования класса
// в пространстве имен
#include <iostream>

using namespace std;

  

namespace ns

{

    // Класс в пространстве имен

    class geek

    {

    public:

        void display()

        {

            cout << "ns::geek::display()\n";

        }

    };

}

  

int main()

{

    // Создание объекта класса geek

    ns::geek obj;

  

    obj.display();

  

    return 0;

}

Выход:

ns::geek::display()

Класс также может быть объявлен внутри пространства имен и определен вне пространства имен с использованием следующего синтаксиса

// Программа на C ++ для демонстрации использования класса
// в пространстве имен
#include <iostream>

using namespace std;

  

namespace ns

{

    // Здесь объявляется только класс

    class geek;

}

  
// Определение класса снаружи

class ns::geek

{

public:

    void display()

    {

        cout << "ns::geek::display()\n";

    }

};

  

int main()

{

    // Создание объекта класса geek

    ns::geek obj;

    obj.display();

    return 0;

}

Выход:

ns::geek::display()

Мы можем определять методы также вне пространства имен . Ниже приведен пример кода.

// C ++ код, чтобы продемонстрировать, что мы можем определить
// методы вне пространства имен.
#include <iostream>

using namespace std;

  
// Создание пространства имен

namespace ns

{

    void display();

    class geek

    {

    public:

       void display();

    };

}

  
// Определение методов пространства имен

void ns::geek::display()

{

    cout << "ns::geek::display()\n";

}

void ns::display()

{

    cout << "ns::display()\n";

}

  
// Код драйвера

int main()

{

    ns::geek obj;

    ns::display();

    obj.display();

    return 0;

}

Выход:

ns::display()
ns::geek::display()

пространство имен в C ++ | Набор 2 (расширение пространства имен и пространства имен без имени)
Пространство имен в C ++ | Набор 3 (доступ, создание заголовка, вложение и алиасинг)
Могут ли пространства имен быть вложенными в C ++?

Ссылка :
http://www.cplusplus.com/doc/tutorial/namespaces/

Эта статья предоставлена Абхинав Тивари . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Пространство имен в C ++ | Комплект 1 (Введение)

0.00 (0%) 0 votes