Книги в продаже (аннотация + содержание + отрывок)

К. Паппас, У. Мюррей
ЭФФЕКТИВНАЯ РАБОТА: VISUAL C++ .NET.
Цена: 280 р.

Источник: Издательский дом 'ПИТЕР'
Разделы: C/C++ (C++ Builder, Visual C++)
Подробнее: Информация от издателя (открывается в новом окне)
Заказ: Оформление покупки (открывается в новом окне)
      Книга является подробным руководством по среде разработки 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 с.

Экономика и управление | Право/a> | Бухгалтерский учет и налоги |