Литмир - Электронная Библиотека
A
A

using std::string; // string означает std::string

using std::cout;   // cout означает std::cout

// ...

Эта конструкция называется объявлением

using
. Она эквивалентна обращению “Грэг”, которое относится к Грэгу Хансену при условии, что никаких других Грэгов в комнате нет.

Иногда мы предпочитаем ссылаться на пространство имен еще “короче”: “Если вы не видите объявления имени в области видимости, ищите в пространстве имен std”. Для того чтобы сделать это, используется директива

using
.

using namespace std; // открывает доступ к именам из пространства std

Эта конструкция стала общепринятой.

#include<string>     // доступ к библиотеке string

#include<iostream>   // доступ к библиотеке iostream

using namespace std; // открывает доступ к именам из пространства std

int main()

{

  string name;

  cout << "Пожалуйста, введите имя \n";

  cin >> name;

  cout << "Привет, " << name << '\n';

}

Здесь поток

cin
— это поток
std::cin
, класс
string
это класс
std::string
и т.д. Поскольку мы используем заголовочный файл
std_lib_facilities.h
, не стоит беспокоиться о стандартных заголовках и пространстве имен
std
. Мы рекомендуем избегать использования директивы using для любых пространств имен, за исключением тех из них, которые широко известны в конкретной области приложения, например пространства имен
std
. Проблема, связанная с чрезмерным использованием директивы
using
, заключается в том, что мы теряем след имен и рискуем создать коллизию. Явная квалификация с помощью соответствующих имен пространств имен и объявлений
using
не решает эту проблему. Итак, размещение директивы
using
в заголовочный файл (куда пользователю нет доступа) — плохая привычка. Однако, для того чтобы упростить первоначальный код, мы разместили директиву using для пространства имен
std
в заголовочном файле
std_lib_facilities.h
. Это позволило нам написать следующий код:

#include "std_lib_facilities.h"

int main()

{

  string name;

  cout << "Пожалуйста, введите имя \n";

  cin >> name;

  cout << "Привет, " << name << '\n';

}

Мы обещаем больше никогда так не делать, если речь не идет о пространстве имен

std
.

Задание

• Создайте три файла:

my.h
,
my.cpp
и
use.cpp
. Заголовочный файл
my.h
содержит следующий код:

extern int foo;

void print_foo();

void print(int);

Исходный файл

my.cpp
содержит директивы
#include
для вставки файлов
my.h
и
std_lib_facilities.h
, определение функции
print_foo()
для вывода значения переменной
foo
в поток
cout
и определение функции
print(int i)
для вывода в поток
cout
значения переменной
i
.

Исходный файл

use.cpp
содержит директивы
#include
для вставки файла
my.h
, определение функции
main()
для присвоения переменной
foo
значения
7
и вывода ее на печать с помощью функции
print_foo()
, а также для вывода значения
99
с помощью функции
print()
. Обратите внимание на то, что файл
use.cpp
не содержит директивы
#include std_lib_facilities.h
, поскольку он не использует явно ни одну из его сущностей.

Скомпилируйте эти файлы и запустите их. Для того чтобы увидеть результаты вывода на печать в системе Windows, в проект следует включить функции

use.cpp
и
my.cpp
и использовать в файле
use.cpp
код
{ char cc; cin>>cc; }
.

2. Напишите три функции:

swap_v(int,int)
,
swap_r(int&,int&)
и
swap_cr(const int&,const int&)
. Каждая из них должна иметь тело

{ int temp; temp = a, a=b; b=temp; }

 где

a
и
b
— имена аргументов.

Попробуйте вызвать каждую из этих функций, как показано ниже.

int x = 7;

int y =9;

swap_?(x,y); // замените знак ? буквами v, r или cr

swap_?(7,9);

const int cx = 7;

const int cy = 9;

swap_?(cx,cy);

swap_?(7.7,9.9);

121
{"b":"847443","o":1}