| Книга является подробным руководством по среде разработки Visual C++ .NET. В ней содержится полная информация о языках программирования C/C++, Visual C++ 7 и C#. Освещены как процедурно-ориентированный, так и объектно-ориентированный подходы к созданию программ. Изложены базовые принципы программирования в среде Windows, а также работа с библиотеками MFC и STL. Подробно рассматриваются вопросы использования механизма OLE и динамически подключаемых библиотек. Представленный в книге код можно применять при разработке собственных проектов. Книга рассчитана на программистов, которые хотят изучить тонкости программирования на языках C++ и C#. 
 
 
 Содержание
 Введение
 ЧАСТЬ 1
 Введение в C++
 Глава 1. Компилятор Visual Studio .NET 7
 Особенности Visual C++ 7.0
 Вариант для профессионалов
 Корпоративный вариант
 Требования к аппаратному и программному обеспечению
 Стандартная установка Visual С++ в системе Windows
 Каталоги
 Документация
 Средства разработки
 Инструмент Solution Explorer
 Интегрированный отладчик
 Встроенные редакторы ресурсов
 Инструменты и утилиты
 Средства автоматизации и макросы
 ClassView
 Настраиваемые панели инструментов и меню
 Возможность соединения с Интернет
 Решения и файлы проектов
 Мастера Wizard
 Возможности компилятора
 Предварительно скомпилированные заголовочные файлы и типы
 Библиотека MFC
 Макроподстановка функций
 Опции компилятора
 General
 Debug
 C/C++
 Link
 Resources
 Browse Info
 Резюме
 Глава 2. Краткое знакомство с MDE
 Запуск Visual C++
 Доступ к контекстной справке
 Вызов команд меню
 Перемещаемые панели инструментов
 Команда Auto Hide
 Команды Navigate Backward и Navigate Forward
 Меню File
 New
 Open
 Close
 Add New Item, Existing Item, AddProject
 Open, Close Solution
 Save
 Save As
 Save All
 Source Control
 Page Setup
 Print
 Исторические списки
 Exit
 Меню Edit
 Undo
 Redo
 Cut
 Copy
 Paste
 Cycle Clipboard Ring
 Delete
 Select All
 Find and Replace
 Go To
 Insert File As Text
 Advanced
 Bookmarks
 Outlining
 IntelliSense
 Меню View
 Open и Open With
 Solution Explorer
 Class View
 Server Explorer
 Resource View
 Properties Window
 Toolbox
 Pending Checkins
 Web-browser
 Other Windows
 Show Tasks
 Toolbars
 Full Screen
 Navigate Backward и Navigate Forward
 Property Pages
 Меню Project
 Add Class, Resource, New-Existing Item
 Add Web Reference
 Set As StartUp Project
 Меню Build
 Build Solution
 Rebuild Solution
 Clean
 Build, Rebuild, Clean
 Batch Build
 Configuration Manager
 Compile
 Меню Debug
 Windows
 Start
 Start Without Debugging
 Processes
 Exceptions
 Step Into и Step Over
 New Breakpoint
 Clear All Breakpoints
 Меню Tools
 Debug Processes
 Connect to Database
 Customize Toolbox
 Add-In Manager
 Build Comment Web Pages
 Macros
 External Tools
 Customize
 Options
 Меню Window
 New Window
 Split
 Dockable, Hide, Floating, Auto Hide, Auto Hide All
 Список
 Windows
 Меню Help
 Dynamic Help
 Contents, Index, Search
 Previous, Next Topic и Sync Contents
 Show Start Page
 Check for Updates
 Customer Feedback, Technical Support
 Help on Help
 About Microsoft Visual C++
 Резюме
 Глава 3. Написание, компиляция и отладка простейшей программы
 Начало работы с Developer Studio
 Создание первой программы
 Редактирование исходного кода
 Сохранение файла
 Создание исполняемого файла
 Построение программы
 Отладка программы
 Различие между сообщениями error и warning
 Первое сообщение об ошибке
 Окна output и sourсe
 Использование команды Find and Replace
 Элементы диалогового окна Replace
 Быстрое обнаружение строк с ошибками
 Полезные предупреждения и сообщения об ошибках
 Продолжение отладки
 Запуск программы
 Работа со встроенным отладчиком
 Дополнительные средства отладки
 Работа с точками останова
 Окно QuickWatch
 Резюме
 Глава 4. Дополнительные возможности Visual C++
 Стандартная библиотека шаблонов STL
 Сложности разработки приложений для различных платформ
 Нереализованные возможности С++
 Структуры данных
 Понятие STL
 История создания библиотеки STL
 Необходимая информация о библиотеке STL
 Структура библиотеки STL
 Обзор элементов библиотеки STL
 Новый язык программирования С# от компании Microsoft
 Ваше первое консольное приложение на C#
 Обычные и ссылочные типы
 Предварительно определенные типы данных
 Массивы
 Операции boxing, unboxing и единая система типов
 Операторы
 Классы, структуры и перечисления
 Пространство имен
 Атрибуты, события, индексаторы, свойства и контроль версий
 Резюме
 ЧАСТЬ 2
 Основы программирования
 Глава 5. Введение в язык C++
 Из истории языка C
 Отличия языка C от ранних языков высокого уровня
 Достоинства языка C
 Недостатки языка С
 Язык C - не для любителей!
 Стандарт ANSI C
 От С к С++ и объектно-ориентированному программированию
 Из истории языка C++
 Эффективность объектно-ориентированного подхода
 Незаметные различия между языками C и C++
 Ключевые различия между C и C++
 Основные компоненты программ, созданных на языках C/C++
 Пять основных свойств хорошей программы на С/С++
 Простейшая программа на языке C
 Простейшая программа на языке С++
 Переход от main к _tmain и от char* к _TCHAR*
 Последние обновления в С++, сделанные комитетом ANSI/ISO
 Получение данных от пользователя в языке C
 Получение данных от пользователя в языке C++
 Файловый ввод-вывод
 Резюме
 Глава 6. Работа с данными
 Идентификаторы
 Ключевые слова
 Ключевые слова, определенные компанией Microsoft
 Стандартные типы данных
 Символы
 Три типа целых чисел
 Модификаторы signed и unsigned
 Числа с плавающей запятой
 Перечисления
 Новый тип данных языка C++ - bool
 Квалификаторы доступа
 Квалификатор const
 Директива #define
 Квалификатор volatile
 Одновременное применение квалификаторов const и volatile
 Квалификаторы pascal, cdecl, near, far и huge
 Квалификатор pascal
 Квалификатор cdecl
 Квалификаторы near, far и huge
 Преобразование типов данных
 Явное преобразование типов
 Новый оператор приведения типов
 Оператор dynamic_cast
 Оператор static_cast
 Новый оператор reinterpret_cast
 Оператор const_cast
 Классы памяти
 Объявление переменных на внешнем уровне
 Объявление переменных на внутреннем уровне
 Правила определения области видимости переменных
 Объявление функций
 Операторы
 Побитовые операторы
 Операторы сдвига
 Инкрементирование и декрементирование
 Арифметические операторы
 Оператор присваивания
 Комбинированные операторы присваивания
 Операторы сравнения и логические операторы
 Условный оператор
 Оператор "запятая"
 Приоритеты выполнения операторов
 Стандартные библиотеки С и С++
 Резюме
 Глава 7. Инструкции
 Инструкции выбора
 Инструкция условного перехода if
 Инструкция if/else
 Условный оператор ?:
 Конструкция switch/case
 Совместное использование конструкций if/else/if и switch/case
 Циклы
 Цикл for
 Цикл while
 Цикл do/while
 Инструкция break
 Инструкция continue
 Совместное использование инструкций break и continue
 Функция exit()
 Функция atexit( )
 Резюме
 Глава 8. Функции
 Прототипы функций
 Синтаксис объявления функции
 Способы передачи аргументов
 Список аргументов по умолчанию
 Классы памяти
 Область видимости переменных
 Рекурсия
 Аргументы функций
 Формальные и фактические аргументы
 Аргументы типа void
 Аргументы типа char
 Аргументы типа int
 Аргументы типа float
 Аргументы типа double
 Массивы как аргументы
 Типы значений, возвращаемых функциями
 Тип результата: void
 Тип результата: char
 Тип результата: bool
 Тип результата: int
 Тип результата: long
 Тип результата: float
 Тип результата: double
 Аргументы командной строки
 Текстовые аргументы
 Целочисленные аргументы
 Аргументы с плавающей запятой
 Дополнительные возможности функций
 Макроподстановка функций
 Перегрузка функций
 Функции с переменным числом аргументов
 Область видимости переменных
 Возможен ли доступ к переменной вне ее области видимости?
 Использование глобальных переменных в функциях
 Преимущество локальных переменных перед глобальными
 Оператор расширения области видимости
 Предотвращение конфликтов локальных и глобальных имен
 Резюме
 Глава 9. Массивы
 Что такое массивы
 Свойства массивов
 Объявления массивов
 Инициализация массивов
 Инициализация по умолчанию
 Явная инициализация
 Инициализация безразмерных массивов
 Доступ к элементам массива
 Вычисление размера массива в байтах
 Выход за пределы массива
 Массивы символов
 Многомерные массивы
 Массивы как аргументы функций
 Передача массивов функциям в языке С++
 Функции работы со строками и массивы символов
 Функции gets( ), puts( ), fgets( ), fputs( ) и sprintf( )
 Функции strcpy( ), strcat( ), strncmp( ) и strlen( )
 Резюме
 Глава 10. Указатели
 Указатели как особый тип переменных
 Объявление указателей
 Использование указателей
 Инициализация указателей
 Ограничения на использование оператора &
 Указатели на массивы
 Указатели на указатели
 Указатели на строки
 Арифметические операции над указателями
 Применение указателей при работе с массивами
 Распространенная ошибка при использовании операторов ++ и --
 Применение квалификатора const совместно с указателями
 Другие операции над указателями
 Физическая реализация указателей
 Использование с указателями функции sizeof() в 16-битовой среде DOS
 Указатели на функции
 Динамическая память
 Указатели типа void
 Подробнее об указателях и массивах
 Строки (массивы типа char)
 Массивы указателей
 Дополнительные сведения об указателях на указатели
 Массивы строковых указателей
 Ссылки в языке С++
 Функции, возвращающие адреса
 Почему необходимо использовать ссылочные типы
 Резюме
 Глава 11. Основы ввода-вывода в языке С++
 Подсистема ввода-вывода в С++
 Потоки cin, cout и cerr
 Операторы ввода и вывода данных
 Библиотеки stream.h и iostream
 Флаги и функции форматирования
 Вывод символов в С++
 Изменение основания системы счисления
 Форматирование строк
 Форматирование числовых значений
 Файловый ввод-вывод
 Определение состояния потока
 Резюме
 Глава 12. Структуры, объединения и дополнительные типы данных
 Структуры
 Синтаксис и правила создания структур
 Дополнительные правила создания структур в С++
 Доступ к членам структур
 Создание простейшей структуры
 Передача структур функциям
 Создание массива структур
 Применение указателей на структуры
 Передача массива структур функции
 Применение структур в С++
 Дополнительные возможности при работе со структурами
 Объединения
 Синтаксис и правила создания объединений
 Создание простейшего объединения
 Другие типы данных
 Применение ключевого слова typedef
 Применение ключевого слова enum
 Резюме
 Глава 13. Дополнительные средства программирования
 Совместимость типов данных
 Понятия совместимости типов языка С, определенные ANSI
 Идентичный тип данных
 Типы перечисления
 Типы массивов
 Типы функций
 Типы структур и объединений
 Типы указателей
 Совместимость сложных типов данных из разных файлов
 Макросы
 Что такое макрос
 Макросы и их параметры
 Проблемы, возникающие с расширением макросов
 Как создавать и применять пользовательские макросы
 Макросы, поставляемые с компилятором
 Директивы препроцессора
 Директивы #ifdef и #endif
 Директива #undef
 Директива #ifndef
 Директива #if
 Директива #else
 Директива #elif
 Директива #line
 Директива #error
 Директива #pragma
 Условная компиляция
 Операторы препроцессора
 Оператор преобразования в формат строки
 Оператор конкатенации
 Оператор преобразования в символы
 Правильное применение заголовочных файлов
 Создание заголовочных файлов
 Предварительная компиляция заголовочных файлов
 Создание предварительно скомпилированных заголовочных файлов
 Применение предварительно скомпилированных заголовочных файлов
 Заголовочные файлы сlimits и cfloat
 Устранение ошибок при помощи функции perror()
 Связные списки и динамическое распределение памяти
 Замечания по использованию связных списков
 Простой связный список
 Резюме
 Глава 14. Программирование: основные библиотеки С/С++
 Заголовочные файлы С/С++
 Стандартные библиотечные функции
 Преобразование данных
 Поиск и сортировка данных
 Другие операции
 Символьные функции
 Проверка алфавитно-цифровых, алфавитных значений, а также значений ASCII
 Проверка наличия знаков пунктуации, управляющих символов и пробелов
 Преобразование символов в ASCII-код
 Строковые функции
 Использование функций памяти
 Использование строковых функций
 Математические функции
 Построение таблицы значений тригонометрических функций
 Функции обработки времени
 Синтаксис структур даты и времени
 Резюме
 ЧАСТЬ 3
 Объектно-ориентированное программирование
 Глава 15. Основы ООП
 Все новое - это хорошо забытое старое
 Структурное программирование
 Объектно-ориентированное программирование
 С++ и ООП
 Основная терминология
 Инкапсуляция
 Иерархия классов
 Виртуальные функции
 Первое знакомство с классом
 Структура в роли примитивного класса
 Синтаксис описания классов в С++
 Простейший класс
 Резюме
 Глава 16. Использование классов C++
 Особенности использования классов
 Работа с простым классом
 Вложенные классы
 Работа с конструкторами и деструкторами
 Перегрузка функций-членов класса
 Дружественные функции
 Указатель this
 Перегрузка операторов
 Перегрузка операторов и вызов функций
 Синтаксис перегрузки
 Производные классы
 Синтаксис наследования
 Использование наследования
 Резюме
 Глава 17. Классы ввода-вывода в языке C++
 Использование перечислений в C++
 Переменные ссылочного типа
 Аргументы по умолчанию
 Функция memset()
 Форматный вывод данных
 Опции ввода-вывода
 Иерархия классов ввода-вывода
 Файловый ввод
 Файловый вывод
 Буферы потоков
 Строковые потоки
 Двоичные файлы
 Комбинирование кода языков С и С++
 Конструирование уникальных манипуляторов
 Манипуляторы без параметров
 Манипуляторы с одним параметром
 Манипуляторы с несколькими параметрами
 Резюме
 Глава 18. Работа в объектно-ориентированной среде
 Применение стека в C++
 Применение связных списков в С++
 Создание родительского класса
 Производный класс
 Использование дружественного класса
 Программа, использующая связный список
 Результат работы программы
 Резюме
 Глава 19. Шаблоны и стандартная библиотека шаблонов
 История создания библиотеки STL
 Преимущества использования библиотеки STL
 Стандартизация языков
 Структура библиотеки STL
 Контейнеры
 Адаптеры контейнеров
 Алгоритмы
 Итераторы
 Дополнительные элементы библиотеки STL
 Шаблоны вне структур
 Ключевое слово template
 Шаблоны функций
 Шаблоны классов
 Библиотека STL: проблемы с шаблонами Шаблон
 Шаблонные векторы
 Реализация векторов
 Шаблоны функций вектора
 Доступ к элементам шаблона
 Вставка и удаление элементов шаблона
 Два различных размера векторов
 Другие операции шаблона
 Синтаксис шаблона
 Операции typedef шаблона
 Перегруженные операторы шаблона
 Методы шаблона
 Примеры программ
 Резюме
 ЧАСТЬ 4
 Мастера для создания приложений Windows
 Глава 20. Концепции и средства программирования Windows-приложений
 Основные понятия
 Среда Windows
 Преимущества Windows
 Формат исполняемых файлов
 Базовые концепции программирования в среде Windows и терминология
 Что представляет собой окно Windows
 Графические элементы окна
 Процедурно-ориентированный класс окна
 Объектно-ориентированное программирование и окна
 Принципы обработки сообщений
 Вызов системных функций
 Заголовочный файл windows.h
 Этапы создания приложения
 Инструменты разработки приложений Windows средствами Visual С++
 Файлы проектов
 Редакторы ресурсов
 Резюме
 Глава 21. Мастера и процедурные приложения для Windows
 Структура приложения
 Компоненты Windows-приложений
 Функция WinMain()
 Структура WNDCLASSEX
 Определение оконного класса
 Создание окна
 Отображение и обновление окна
 Цикл обработки сообщений
 Оконная функция
 Обработка сообщений WM_PAINT
 Обработка сообщения WM_DESTROY
 Функция DefWindowProc()
 Создание процедурно-ориентированного проекта
 Наполнение Windows-программы содержанием
 Рисование эллипса
 Рисование сегмента
 Рисование сектора
 Рисование прямоугольника
 Другой полезный проект
 Приложение для построения круговых диаграмм
 Файл pie.cpp исходного текста
 Резюме
 Глава 22. Библиотека MFC
 Зачем нужны библиотеки классов
 Принципы, лежащие в основе MFC
 Ключевые особенности MFC
 Все начинается с CObject
 Иерархия классов MFC
 Текстовый редактор
 Построение приложения
 Резюме
 Глава 23. Мастера и MFC-приложения
 Рисование графических примитивов в рабочей области окна
 Использование мастера Application Wizard
 Модификация кода шаблона
 Проверка модифицированного кода
 Дополнительные детали проекта
 Отображение ряда Фурье
 Создание шаблонного кода проекта Fourier
 Добавление ресурса диалогового окна
 Изменение ресурса меню
 Область заголовка и окно About проекта Fourier
 Код проекта Fourier
 Код для масштабирования графики
 Связь диалогового окна с проектом
 Тестирование проекта Fourier
 Построение гистограмм
 Строка заголовка
 Меню
 Значок окна About
 Окно About
 Диалоговое окно ввода данных
 Ядро кода BarChart
 Код для масштабирования графики
 Связь диалогового окна с проектом
 Тестирование проекта BarChart
 Резюме
 ЧАСТЬ 5
 Современные концепции программирования
 Глава 24. Создание Windows-приложений на языке С#
 Создание приложения CircleArea на C#
 Формы и модули
 Solution Explorer
 Элементы управления и их свойства
 Код проекта, принимаемый по умолчанию
 Реакция на события
 Изменение значений свойств из кода
 Создание на C# Windows-приложения Tester
 Резюме
 Глава 25. Библиотека STL и Windows
 Комплексные числа
 Синтаксис шаблона
 Класс complex
 Класс complex
 Класс complex
 Пример использования шаблона класса
 Windows-приложение, использующее STL и MFC
 Код для изменения размеров графиков
 Тестирование проекта Complex2
 Резюме
 Глава 26. Основы механизма OLE
 Свойства и спецификации OLE
 Объекты
 Файлы
 Данные
 Внедрение
 Внедренный объект
 Связывание
 Разработка приложения-контейнера
 Использование мастера AppWizard
 Обзор файлов проекта
 Тестирование приложения-контейнера
 Резюме
 Глава 27. Элементы управления ActiveX
 Основные концепции
 Правила разработки элементов управления
 Класс COIeControl
 Контейнеры
 Создание простого элемента управления ActiveX
 Создание проекта TDCtrl
 Код, сгенерированный мастером
 Модификация шаблона
 Изменение формы, размера и цвета элемента управления TDCtrl
 События мыши
 Заголовочный файл TDCtrlCtrl.h
 Тестирование окончательной версии элемента управления
 Резюме
 Глава 28. Динамически подключаемые библиотеки
 DLL, основанные на MFC
 Заголовочный файл Framer.h
 Файл исходного кода Framer.cpp
 Компоновка файла Framer.dll
 Приложение, вызывающее DLL
 Заголовочный файл DLLDemoView.h
 Файл исходного кода DemoView.cpp
 Резюме
 Глава 29. Создание Web-форм
 Элементы управления Web
 Элементы управления RadioButton и RadioButtonList
 Элемент управления Calendar
 Элементы управления Validation
 Элементы управления ListBox и DropDownList
 Резюме
 Предметный указатель
 
 
 
 
 ОТРЫВОК
 
 
 ЧАСТЬ 2
 Основы программирования
 Глава 5. Введение в язык C++
 Глава 6. Работа с данными
 Глава 7. Инструкции
 Глава 8. Функции
 Глава 9. Массивы
 Глава 10. Указатели
 Глава 11. Основы ввода-вывода в языке С++
 Глава 12. Структуры, объединения и дополнительные типы данных
 Глава 13. Дополнительные средства программирования
 Глава 14. Программирование: основные библиотеки С/С++
 Глава 5
 Введение в язык C++
 Знакомство с языком программирования C++ мы начнем с исторической справки. Знание истории поможет уяснить, почему С и C++ на протяжении нескольких десятилетий остаются столь популярным среди программистов, а также, что самое главное, понять концепции, лежащие в основе этих языков.
 Примеры программ, рассматриваемые в дальнейшем, следует вводить и запускать в среде Microsoft Visual C++. Повторите материал, изложенный в предыдущих главах, где описаны элементарные операции по компиляции и отладке программ.
 ПРИМЕЧАНИЕ. При компиляции некоторых программ, представленных в примерах, возможен вывод сообщений об усечении данных, возникшем во время преобразования из типа double в тип float. В процессе работы над примерами настоящей главы такие предупреждения можно оставлять без внимания.
 Из истории языка C
 История языка C восходит к операционной системе UNIX, поскольку она сама и большинство программ для нее написаны на C. Однако это не означает, что С предназначен исключительно для среды UNIX. Благодаря популярности системы UNIX язык С был признан в среде программистов языком системного программирования, который можно использовать для написания компиляторов и операционных систем. В то же время он удобен для создания разнообразных прикладных программ.
 Операционная система UNIX разработана в 1969 г. на маломощном, по современным представлениям, компьютере DEC PDP-7 компанией Bell Laboratories (город Мюррей Хилл, штат Нью-Джерси). Система была полностью написана на языке ассемблера для PDP-7 и претендовала на звание "дружественной для программистов", поскольку содержала довольно мощный набор инструментов разработки и являлась достаточно открытой средой. Вскоре после создания системы UNIX Кен Томпсон (Ken Thompson) написал компилятор нового языка B.
 С этого момента можно проследить историю языка C, поскольку язык B Кена Томпсона является его предшественником. Итак, вот "родословная" языка С:
 Язык Год и место создания
 Algol 60 Разработан международным комитетом в 1960 г.
 CPL Combined Programming Language - комбинированный язык программирования. Разработан в 1963 г. группой программистов из Кембриджского и Лондонского университетов
 BCPL Basic Combined Programming Language - базовый комбинированный язык программирования. Разработан в Кембридже Мартином Ричардсом (Martin Richards) в 1967 г.
 B. Разработан Кеном Томпсоном, компания Bell Labs, в 1970 г.
 С. Разработан Деннисом Ритчи (Dennis Ritchie), компания Bell Labs, в 1972 г.
 Позднее, в 1983 г., при Американском институте национальных стандартов (American National Standards Institute - ANSI) был учрежден специальный комитет с целью стандартизации языка C, что обусловило разработку стандарта ANSI C.
 Язык Algol 60 появился всего на несколько лет позже языка FORTRAN. Это был значительно более мощный язык, который во многом предопределил пути дальнейшего развития большинства последующих языков программирования. Его создатели уделили много внимания логической целостности синтаксиса команд и модульной структуре программ, с чем, собственно, впоследствии и ассоциировались все языки высокого уровня. К сожалению, Algol 60 не стал популярным в США. Многие считают, что причиной тому была определенная его абстрактность.
 Разработчики языка CPL попытались приблизить "возвышенный" Algol 60 к реалиям конкретных компьютеров. Однако этот язык остался таким же трудным для изучения и практического применения, как и Algol 60, что предопределило его судьбу. В наследство от CPL остался язык BCPL - упрощенная версия языка CPL, сохранившая лишь основные его функции.
 Когда Кен Томпсон взялся за разработку языка B для ранней версии системы UNIX, он попытался еще больше упростить язык CPL. Ему удалось создать довольно интересный язык, который эффективно работал на том оборудовании, для которого был спроектирован. Языки B и BCPL, очевидно, были упрощены больше, чем нужно: их применение ограничивалось решением весьма специфических задач.
 Например, когда Кен Томпсон завершил работу над языком B, появился новый компьютер PDP-11. Система UNIX и компилятор языка B были сразу же модернизированы в соответствии с характеристиками новой машины. Хотя PDP-11 по мощности превышал своего предшественника PDP-7, возможности этого компьютера оставались все еще слишком скромными по сравнению с современными стандартами. Он имел только 24 Кб оперативной памяти, из которых 16 Кб отводились операционной системе, емкость жесткого диска составляла 512 Кб. Возникла идея переписать систему UNIX на языке B. Но B работал слишком
 медленно, поскольку оставался языком интерпретирующего типа. Существовала и другая проблема: язык B ориентировался на работу со словами, тогда как компьютер PDP-11 оперировал байтами. Стала очевидной необходимость усовершенствования языка B. Работа над более совершенной версией, которую назвали языком C, началась в 1971 г.
 Деннис РитчиДеннис Ритчи, создатель языка C, частично восстановил такое свойство языка, как независимость от конкретного оборудования, которым практически не обладали языки BCPL и B. За счет этого были успешно введены в эксплуатацию типы данных и в то же время сохранена возможность прямого доступа к оборудованию - идея, заложенная еще в языке CPL.
 Многие языки программирования, разработанные одним автором (C, Pascal, Lisp и APL), отличались большей целостностью, чем те, над которыми трудились группы разработчиков (Ada, PL/I и Algol 60). Кроме того, для языков первой категории характерна определенная ориентация на решение тех вопросов, в которых автор наиболее компетентен. Деннис Ритчи - признанный специалист в области системного программирования, а именно в области языков программирования, операционных систем и генераторов программ. Учитывая профессиональную направленность автора, нетрудно понять, почему C был
 признан прежде всего разработчиками системных программ. Язык C представлял собой язык программирования относительно низкого уровня, что обеспечивало контроль каждой мелочи в работе алгоритма и достижение максимальной эффективности. Но в то же время в C были заложены принципы языка высокого уровня, что позволяло избежать зависимости программ от особенностей архитектуры конкретного компьютера. Это повышало эффективность процесса программирования.
 Отличия языка C от ранних языков высокого уровня
 Вам, конечно, интересно узнать, какое место занимает C в ряду языков программирования. Чтобы ответить на этот вопрос, рассмотрим иерархию языков, где точками представлены промежуточные этапы развития (рис. 4.1). К примеру, давние предки компьютеров, такие как станок Джакарда (Jacquard's loom, 1805 г.) и счетная машина Чарльза Беббиджа (Charles Babbage, 1834 г.), программировались механически для выполнения строго определенных функций. Не исключено, что в скором будущем мы сможем управлять компьютерами, посылая нейронные импульсы непосредственно в кору головного мозга, наприме
 р, подключив воспринимающие контакты к височной области мозга (участвующей в запоминании слов) или к области Брока (управляющей функцией речи).
 Первые языки ассемблера, которые появились вместе с электронными вычислительными машинами, позволяли работать непосредственно со встроенным набором команд компьютера и были достаточно простыми для изучения. При их использовании проблема рассматривалась с точки зрения работы оборудования. Поэтому программисту постоянно приходилось заниматься перемещением байтов между регистрами, осуществлять их суммирование, сдвиг и, наконец, запись в нужные области памяти для хранения результатов вычислений. Это была очень утомительная работа с высокой вероятн
 остью допуска ошибок.
 Первые языки высокого уровня, например FORTRAN, разрабатывались как альтернатива языкам ассемблера.···
 · ··
 
 · +·
 · Во втором коде для директивы #include указано имя файла iostream вместо stdio.h. Заголовочный файл stdio.h содержал специфические для С определения, необходимые для осуществления стандартных операций ввода/вывода. Синтаксис .h характерен для старого стиля. Файл iostream содержит специфические для С++ определения, необходимые для выполнения простых операций ввода/вывода. Имя файла без расширения .h соответствует последним требованиям стандарта ANSI/ISO С++. ±···
 · ··
 
 · w·
 · Третье различие связано с использованием оператора объявления (добавления) пространства имен std, что также относится к разряду новых требований, сформулированных в стандарте ANSI/ISO С++ (мы еще вернемсВ среде разработки Visual Studio .NET 7.0 компанией Microsoft введено понятие программного отображения общего текста (generic-text routine mappings). В заголовочном файле tchar определены макросы, или встраиваемые функции, отображения кодов символов для моделей MBCS (MultiByte Character Set - набор символов, каждый из которых представлен однобайтовым или двухбайтовым значением), SBCS (Single-Byte Character Set - на
 бор однобайтовых символов) и Unicode. Эти функции задают представление символьных данных как значений ANSI ASCII с помощью одиночного байта или двух байтов в стандарте Unicode. При написании алгоритмов, предназначенных для работы со стандартом Unicode, все функции main() должны быть представлены в виде _tmain(), а указатели символов char* - в виде_TCHAR*.
 Последние обновления в С++, сделанные комитетом ANSI/ISO
 В процессе разработки стандартной библиотеки шаблонов STL комитет ANSI/ ISO нашел возможность внести некоторые изменения в стандарт языка С++. Эти изменения касаются в основном возможностей, которые присущи и другим языкам и до сих пор не были реализованы в традиционном С++. Указанные изменения содержатся в расширениях языка и не повлияют на программы, написанные ранее на С++.
 Использование пространства имен
 Пространство имен определяет область видимости констант, переменных, функций, классов и т. д. Идентификаторы пространства имен самого низкого уровня объявляются в пределах функции. С этим уровнем ассоциируются функции-члены и объявления методов. Более высокий уровень имеет пространство имен в пределах класса.
 Область видимости файлов определяется пространством имен файлов. Например, если для создания исполняемого файла 123.exe необходимы файлы 1.cpp, 2.cpp и 3.cpp, то идентификаторы, объявленные в файле 1.cpp, будут невидимы (по умолчанию) для кода в файлах 2.cpp и 3.cpp.
 Наиболее высокий уровень имеет пространство имен программы или рабочей области. Долгие годы такая иерархия позволяла создавать корректно работающие программы без конфликтов имен. Современные программы представляют собой комбинацию исходных файлов, созданных автором, компилятором, а также другими разработчиками. При таком положении вещей определения области видимости программы будет недостаточно для предотвращения конфликтов имен между категориями. Пространства имен позволяют защитить все идентификаторы в программе, что предотвращает разнообр
 азные коллизии.
 Опасность коллизии обычно существует для внешних глобальных идентификаторов, используемых повсеместно в программе. Эти глобальные имена являются видимыми для всех объектных модулей прикладной программы, внешних классов и библиотек, а также системных библиотек компилятора. Если две переменные в глобальной области видимости имеют одинаковые имена, компоновщик выдает сообщение об ошибке.
 Многие разработчики компиляторов решают эту проблему за счет присваивания каждой переменной уникального идентификатора. Например, стандартный компилятор С добавляет знак подчеркивания в качестве префикса к каждому имени глобальной переменной, а программистам рекомендуется избегать такой формы написания для предотвращения конфликта имен.
 Некоторые производители во избежание конфликтов снабжают имена глобальных переменных мнемоническим префиксом. Но даже такой метод окажется неэффективным, если два разработчика употребляют один и тот же префикс. Проблема в том, что язык не имеет встроенного механизма, который отделял бы глобальные идентификаторы от идентификаторов других библиотек, подключенных к приложению.
 В распоряжении программиста имеются три способа предотвращения коллизий: модифицировать исходный код; убедить авторов кода, с которым сопряжены конфликты, изменить объявляемые имена; выбрать альтернативный код, выполняющий те же функции. Не слишком приятные перспективы!
 Ключевое слово namespace в С++ позволяет ограничить область видимости переменных пространством имен. Если ссылки на глобальные имена, объявленные внутри блока, расположены за пределами этого блока, то они должны содержать идентификатор пространства имен. Фактически, это равноценно применению префиксов. Однако идентификаторы пространства имен, в отличие от двух- и трехсимвольных префиксов, состоят из большего числа символов, благодаря чему гарантия их корректной работы намного выше.
 
 
 Эффективная работа: Visual C++ .NET. / К. Паппас, У. Мюррей - СПб: Питер, 2002. - 816 с. |