|
Программирование >> Инициализация объектов класса, структура
#include <vector> #include <string> #include <iterator> int main() { привязка istream iterator к стандартному вводу istream iterator<string> infile( cin ); istream iterator, отмечающий end-of-stream istream iterator<string> eos; инициазация svec элементами, считаеми из cin vector<string> svec( infile, eos ); ... Правильно, этот фрагмент кода не компилируется, потому что члены пространства имен std должны использоваться с указанием их специфицированных имен. Для того чтобы исправить положение, мы можем выбрать один из следующих способов: заменить имена членов пространства std в этом примере соответствующими снецифицированн1ми именами; применить using-объявления, чтобы сделать видим1ми иснользуем1е члены пространства std; употребить using-директиву, сделав видим1ми все члены пространства std. Членами пространства имен std в этом примере являются: шаблон класса istream iterator, стандартный входной поток cin, класс string и шаблон класса vector. Простейшее решение - добавить using-директиву после директивы препроцессора #include: using namespace std; В данном примере using-директива делает все члены пространства std видим1ми. Однако не все они нам нужн:. Предпочтительнее пользоваться using-объявлениями, чтобы уменьшить вероятность коллизии имен при последующем добавлении в программу глобальных объявлений. using std::istream iterator; using std::string; using std::cin; Using-объявления, необходим1е для компиляции этого примера, таковы: using std::vector; Но куда их поместить? Если программа состоит из большого количества файлов, можно для удобства создать заголовочный файл, содержащий все эти using-объявления, и включать его в исходные файлы вслед за заголовочными файлами стандартной библиотеки. namespace Exercise { int ivar = 0; double dvar = 0; const int limit = 1000; int ivar = 0; void manip() { double dvar = 3.1416; int iobj = limit + 1; ++ivar; ++::ivar; Возьмем следующий фрагмент кода: Каковы будут значения объявлений и выражений, если поместить using-объявления для всех членов пространства имен Exercise в точку 1? В точку 2? А если вместо using-объявлений использовать using-директиву? В нашей книге м1 не употребляли using-объявлений. Это сделано, во-первых, для того, чтобы сократить размер кода, а во-вторых, потому, что большинство примеров компилировались в реализации С++, не поддерживающей пространства имен. Подразумевается, что using-объявления указаны для всех членов пространства имен std, используемых в примерах. Упражнение 8.14 Поясните разницу между using-объявлениями и using-директивами. Упражнение 8.15 Напишите все необходим1е using-объявления для примера из раздела 6.14. Упражнение 8.16
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |