- •1)Краткий обзор основных парадигм программирования
- •13) Класс как область видимости
- •19) Конструктор преобразования и конструкторы с двумя и более параметрами
- •25) Порядок вызова конструкторов и деструкторов
- •31) Перегрузка функций
- •37) Закрытое (private) наследование
- •43) Абстрактные классы. Чистые виртуальные функции
- •49) Интерфейсы
- •55) Шаблонные классы
1)Краткий обзор основных парадигм программирования
В соответствии с концепцией фон-Неймана – основателя теоретической концепции компьютерной техники, процессор обрабатывает данные, выполняя инструкции (команды), которые находятся в той же оперативной памяти, что и данные. Таким образом, можно выделить две основные сущности процесса обработки информации: код, как совокупность инструкций, и данные. Все программы в соответствии с выбранной технологией программирования концептуально организованы вокруг своего кода или вокруг своих данных.
Рассмотрим основные на сегодняшний день парадигмы программирования:
1) Процессно-ориентированная парадигма, при которой программа представляет собой ряд последовательно выполняемых операций – модель фон-Неймана. При этом код воздействует на данные. Языки, реализующие эту парадигму, называются процедурными или императивными. Такими языками являются, например, C, Pascal и др. 6
2) Объектно-ориентированная парадигма, при которой программа рассматривается как совокупность фрагментов кода, обрабатывающих от- дельные совокупности данных – объекты. Эти объекты взаимодействуют друг с другом посредством так называемых интерфейсов. При этом данные управляют доступом к коду.
3) Аппликативная или функциональная парадигма. Основная идея данного подхода заключается в формализованном определении функции, которую выполняет программа. Таким образом, вместо определения последовательности состояний, через которые должен пройти компьютер, чтобы получить требуемый результат, необходимо определить функцию, при применении которой к исходным данным получается требуемое решение: y = f (x).
4) Парадигма, основанная на использовании системы правил (парадигма логического программирования). При этом подходе операторы про-граммы выполняются не в той последовательности, в которой они написаны, а на основе анализа разрешающих условий (РУ).
7) Стандартная библиотека С++, стандартный ввод-вывод
Для языка С++ создана своя стандартная библиотека, которая отличается от стандартной библиотеки С. Изменения затронули, например, функции ввода-вывода, введен раздел, посвященный шаблонам (STL – стандартная библиотека шаблонов, описанная ниже). Тем не менее, стандартная библиотека С целиком включена в стандартную библиотеку С++. 13 В С++ введен новый формат задания заголовочных файлов стандартной библиотеки: без .h. , при этом все используемые в библиотеке имена погружены в стандартное пространство имен std (см. раздел 2.6). Например, в С++ файл заголовков ввода-вывода называется iostream , и для его подключения необходимо использовать директиву
#include <iostream>
Чтобы подключить к программe на С++ заголовочный файл стандартной библиотеки С в новом формате, надо добавить в начало названия соответствую- щего файла букву с. Например,
#include <cstdio>
В файле стандартной библиотеки С++ введены классы, со- ответствующие стандартным (консольным) потокам ввода ( класс istream ) и вывода ( класс ostream ), а также объекты этих классов: cin – объект класса istream, cout, cerr – объекты класса оstream.Через эти объекты для базовых типов данных доступны операции ввода >> из стандартного потока ввода, например,
cin >> x;
и вывода << в стандартный поток вывода ( cout ) или стандартный файл ошибок ( cerr ), например, cout << “String” << S << endl;
При этом явно не указываются никакие форматирующие элементы. endl – константа, обозначающая конец строки, она так же определена в файле .
Стандартная библиотека С++:
1) обеспечивает поддержку свойств языка, например, управление памятью (функции, основанные на использовании операций new и delete)
2) предоставляет информацию о типах во время выполнения программы (RTTI)
3) обеспечивает поддержку обработки исключений (стандартные исключения)
4) предоставляет информацию о зависящих от реализации аспектах языка (например, максимальное значение float)
5) предоставляет программисту общеупотребительные математические и некоторые другие функции (например, sqrt(), генератор случайных чисел и т. д.)
6) предоставляет программисту некоторые нетривиальные и машин- но-зависимые средства, что позволяет писать переносимые программы (например, списки, функции сортировки, потоки ввода/вывода).
