
- •Раздел 4. Разработка по Тема 4.1. Проектирование интерфейса с пользователем
- •4.1.1. Типы пользовательских интерфейсов.
- •4.1.2. Пользовательская и программная модели интерфейса.
- •4.1.3. Разработка диалогов.
- •4.1.4. Основные компоненты графических пользовательских интерфейсов.
- •Тема 4.2. Реализация графических пользовательских интерфейсов.
- •4.2.1. Диалоги, управляемые пользователем.
- •4.2.2. Диалоги, управляемые системой.
- •4.2.3. Использование метафор.
- •4.2.4. Технология Drag and Drop.
- •4.2.5. Интеллектуальные элементы.
- •4.3.1. Базовые типы данных.
- •Константы
- •Область действия имен
- •4.3.2. Указатели и адресная арифметика.
- •4.3.3. Составные типы данных. Структуры
- •Битовые поля
- •Определение типов
- •Перечислимые типы
- •4.3.4. Выражения и операции.
- •4.3.5. Управляющие конструкции. Условные операторы
- •Операторы циклов
- •4.4.1. Статические одномерные массивы.
- •4.4.2. Статические многомерные массивы.
- •4.4.3. Динамические массивы.
- •4.4.4. Массивы указателей.
- •4.5.1. Стеки.
- •4.5.2. Очереди.
- •4.5.3. Списки.
- •4.5.4. Бинарные деревья.
- •4.6.1. Объявление классов и экземпляров классов.
- •4.6.2. Инкапсуляция данных и методов.
- •4.6.3. Конструкторы классов.
- •Конструктор по умолчанию
- •Конструктор копирования
- •4.6.4. Деструкторы классов.
- •4.7.1. Разделы в описании класса.
- •4.7.2. Friend-конструкции.
- •4.7.3. Статические члены классов.
- •4.7.4. Использование описателя const в классах.
- •4.8.1. Вложенность классов.
- •4.8.2. Наследование данных и методов.
- •4.8.3. Типы наследования.
- •4.9.1. Полиморфизм раннего связывания.
- •4.9.2. Полиморфизм позднего связывания и виртуальные функции.
- •4.9.3. Абстрактные методы и классы.
- •4.10.1. Функции консольного ввода-вывода.
- •4.10.2. Функции файлового ввода-вывода.
- •4.10.3. Использование библиотеки классов потокового ввода-вывода.
- •4.11.1. Перегрузка операций.
- •4.11.2. Шаблоны функций.
- •4.11.3. Шаблоны классов.
- •4.11.4. Обработка исключений.
- •Тема 4.12. Com-технология.
- •4.12.1. Основные понятия.
- •4.12.2. Типы интерфейсов.
- •Свойства интерфейсов
- •Типы интерфейсов
- •4.12.3. Типы com-объектов.
- •4.12.4. Фабрика классов.
- •Тема 4.13. Построение com-сервера.
- •4.13.1. Язык idl.
- •Содержимое файла idl
- •4.13.2. Определение пользовательского интерфейса.
- •4.13.3. Реализация пользовательского интерфейса.
- •4.13.4. Создание тестового клиента.
- •Тема 4.14. Обзор платформы ms .Net.
- •4.14.1. Общая идея архитектуры .Net.
- •4.14.2. Достоинства и недостатки .Net.
- •4.14.3. Схема трансляции программ в .Net.
- •4.14.4. Язык msil.
- •4.14.5. Объектно-ориентированная модель .Net.
4.9.3. Абстрактные методы и классы.
Абстрактный класс содержит по крайней мере одну чисто виртуальную функцию. Чисто виртуальная функция объявляется путем указания =0 в конце ее объявления.
// Example of a virtual function and abstract classes
#include <iostream.h>
class Shape // Абстрактный класс
{
public:
virtual void draw() = 0; // Чисто виртуальная функция
};
class Rectangle: public Shape
{
public:
void draw();
};
class Circle : public Shape
{
public:
void draw();
};
Объекты абстрактного класса не могут существовать. Однако указатель или ссылка на него могут быть созданы. Объект абстрактного класса не может быть в качестве типа возвращаемого функцией значения и в качестве параметра функции. Если в абстрактном классе объявлена чисто виртуальная функция и она не переопределена (overriden) в производном классе, то этот производный класс тоже становится абстрактным, так как он наследовал чисто виртуальную функцию. Абстрактные классы используются только для того, чтобы от них могли быть образованы производные классы. Это своеобразный генетический материал для будущих классов. Обычно они стоят во главе иерархического дерева классов. Конструктор абстрактного класса служит не для создания объектов своего класса, а для инициализации объектов производных (не абстрактных классов). Точнее, именно тех полей производного класса, которые перешли по наследству от абстрактного. Методы абстрактного класса могут быть вызваны в теле конструктора, исключая, конечно, чисто виртуальные функции.
Тема 4.10. Операции ввода/вывода данных в Visual C++.
4.10.1. Функции консольного ввода-вывода.
В файле conio.h содержатся прототипы библиотечных функций ввода с клавиатуры и вывода на экран в текстовом режиме монитора. Клавиатура и дисплей и совокупности обозначаются термином "консоль" (console), поэтому принято говорить о вводе с консоли. Функция getch служит для ввода одного символа с консоли. Таким образом осуществляется задержка в выполнении программы и ожидание реакции пользователя на программное сообщение. Это не очень надежный способ, но он достаточно распространен среди программистов ввиду своей простоты. Вызов fflush(stdin), очищает буфер ввода, что повышает надежность работы scanf при ошибочных попытках ввода. Конструкция
if (!getch()) getch();
дает пользователю время для восприятия сообщения и работает несколько надежнее, чем просто getch();. Функция getch выбирает один байт из входного потока stdin, оставляя в буфере ввода второй байт, если он был. Служебные символы, в отличие от обычных, дают двухбайтный код с нулевым первым байтом. Оператор if (!getch()) getch()), "съедает" содержимое буфера ввода, даже если пользователь нажмет клавишу служебною символа. Именно это обстоятельство используется при вычислении условия if(!getch()). Рассмотренный трюк действует только при компиляции программы для платформы DOS, так как Windows перехватывает и сама обрабатывает служебные символы.
Функция scanf предназначена для форматируемого ввода из потока stdin, который по умолчанию закреплен за клавиатурой. Аргумент "%d" указывает, что ожидается целое число в десятичной форме. Второй аргумент &n означает, что в функцию scanf передается адрес переменной int n, как она (функция scanf) того и требует. Благодаря этому scanf в состоянии изменить содержимое по переданному адресу, то есть значение переменной n.
В функциях printf и scanf спецификаторы %d, %f, %5.2f определяют формат, в котором выводится число или ожидается вводимое число. Например, оператор
printf(". .%d. .%f. .",i,а);
следует интерпретировать так. Любой текст, обозначенный точками, выводится так, как он есть. Вместо %d подставляется числовое значение первого параметра из списка, следующего за второй закрывающей двойной кавычкой, то есть значение переменной i. Далее опять выводится текст, стоящий в строке между %d и %f, затем вместо %f подставляется числовое значение следующей переменной из списка, то есть переменной а, и т. д. Спецификатор формата %f используется для переменных типов float и double, спецификатор %d - для целых чисел.
В операторе scanf ("%f", &x[i]); & в данном контексте означает операцию взятия адреса. Адрес 1-го элемента массива х[] передается в функцию scanf, которая записывает по этому адресу значение числа, введенное пользователем с консоли. В случае ошибочного ввода реакция программы зависит только от возможностей библиотечной процедуры scanf. Такое положение вещей не всегда устраивает разработчика ПО, поэтому он часто включает свои собственные проверки введенной информации на удовлетворение разумным ограничениям.