- •Понятие ооп. Причины появления ооп.
- •Концепции ооп. Инкапсуляция
- •Концепции ооп. Наследование
- •Концепции ооп. Полиморфизм
- •5.Роль типов данных и их становление
- •6.Этапы ооп.
- •8. Заголовочные файлы
- •13. Классы и объекты
- •14. Члены класса
- •15. Описание класса
- •30. Параметризованные функции
- •31. Перегрузка операции. Перегрузка унарных операторов
- •32. Перегрузка операции. Перегрузка бинарных операторов
- •33. Исключения и их обработка.
- •34. Общая хар-ка стандартной библиотеки шаблонов
- •35. Ввод-вывод с использованием потока stl
- •36. Фундаментальные типы и их соответствие cli размерным типам
- •43. Общая характеристика платформы .Net и библиотеки классов WinForms.
- •44. Укрупненная иерархия WinForms
- •45. Классы Object, Component.
15. Описание класса
Описание класса начинается с ключевого слова class. Список членов класса определяет собственные элементы класса. При описании членов классов возможно указание атрибутов управления доступом (модификаторов доступа) к элементам классов. Такими атрибутами являются: • public: члены класса видны извне класса • protected: члены класса видны в производном классе • private: соответствующие элементы могут использоваться только внутри класса По умолчанию элементы класса имеют тип private. Указанный в описании модификатор доступа распространяется на все последующие определения, пока не встретится другой модификатор. Поскольку пользователя часто интересует открытая часть класса, то в описании она обычно располагается первой.
30. Параметризованные функции
31. Перегрузка операции. Перегрузка унарных операторов
Перегрузка унарного оператора .Все дальнейшие примеры будем рассматривать на базе класса intarray. Проиллюстрируем перегрузку унарного оператора «-», который будет создавать копию объекта типа intarray, в котором все элементы массива поменяют свой знак. intarray operator-() { intarray t=intarray(*this); for (int i=0; i<fcount; i++) t.fitems[i]=-fitems[i]; return t; }; Здесь сразу виден зачастую неизбежный недостаток перегрузки операторов – падение производительности. Так в приведенном примере необходимо создать новый объект t, что потребует дополнительных ресурсов, а затем (при выходе из области времени) отработает еще и деструктор при освобождении памяти объекта t.
32. Перегрузка операции. Перегрузка бинарных операторов
Если двухместный оператор перегружается с помощью функции – члена класса, то в качестве своего первого аргумента он получает неявно переданную переменную класса, а второго – единственный из списка аргументов. Пример перегрузки операции сложения: intarray intarray::operator+(const intarray &a) { intarray t(*this); int fmin=fcount<a.fcount?fcount:a.fcount; for (int i=0; i<fmin; i++) t.fitems[i]+=a.fitems[i]; return t; };
33. Исключения и их обработка.
Исключением будем называть такие изменения в условиях выполнения алгоритма, которые вызывают остановку процесса исполнения алгоритма, чтобы могла быть выполнена специальная подпрограмма, предназначенная для обработки ошибки. Программа считается нейтральной по отношению к исключениям, если при возникновении исключительной ситуации внутри метода класса и ее не обрабатывает, то прерывает работу метода и передает управление методу (контейнерного) класса, который вызвал данный метод до тех пор, пока не встретится метод, который обработает исключение. Язык C++ определяет стандарт обслуживания исключений в рамках ООП. C++Builder предусматривает специальные механизмы для обработки исключений (ошибок), которые могут возникнуть при использовании Библиотеки Визуальных Компонент. C++Builder также поддерживает обработку исключений самой операционной системы и модель завершения работы приложения. Когда программа встречает ненормальную ситуацию, на которую она не была рассчитана, можно передать управление другой части программы, способной справиться с этой проблемой, и либо продолжить выполнение программы, либо завершить работу. Переброс исключений (exception throwing) позволяет собрать в точке переброса информацию, которая может оказаться полезной для диагностики причин, приведших к нарушению нормального хода выполнения программы. Вы можете определить обработчик исключения (exception handler), выполняющий необходимые действия перед завершением программы. Обслуживаются только так называемые синхронные исключения, которые возникают внутри программы. Такие внешние события, как нажатие клавиш Ctrl+C, не считаются исключениями. Блок кода, который может сгенерировать исключение, начинается ключевым словом try и заключается в фигурные скобки. Если блок try обнаруживает исключение внутри этого блока, происходит программное прерывание и выполняется следующая последовательность действий: 1. Программа ищет подходящий обработчик исключения. 2. Если обработчик найден, стек очищается и управление передается обработчику исключения. 3. Если обработчик не найден, вызывается функция terminate для завершения приложения. Блок кода, который обрабатывает возникшее исключение, начинается ключевым словом catch и заключается в фигурные скобки. По меньшей мере один кодовый блок обработчика исключения должен следовать непосредственно за блоком try. Для каждого исключения, которое может сгенерировать программа, должен быть предусмотрен свой обработчик. Обработчики исключений просматриваются по порядку и выбирается обработчик исключения, тип которого соответствует типу аргумента в операторе catch. При отсутствии в теле обработчика операторов goto, выполнение программы будет возобновлено, начиная с точки, следующей за последним обработчиком исключений данного блока try. Если необходимо обработать возможное исключение фрагмент программы заключается в блок try. Блок try имеет вид try { // текст программы } В случае возникновения исключения управления передается обработчикам исключений catch или __finally. Операторы внутри catch выполняются только в случае возникновения исключения, т.е., если исключения не случилось – его операторы не выполняются вообще. В C++Builder обработчик исключений catch лучше применять в виде catch(const Exception *E) { ShowMessage(AnsiString(E->ClassName())+ E->Message); } или catch(…) { ShowMessage(“Что-то случилось”); } Операторы внутри __finally выполняются всегда, в т.ч. и при возникновении исключения. __finally { // выполнится всегда }
Возбуждение исключений производится оператором throw и функцией Abort(). В среде C++ Builder лучше использовать возбуждение исключений в виде throw (new MyException(<текст>)), где MyException – это класс Exception или производный от него.
