- •11. Базы данных, определение, типы бд. Понятие домена, атрибута,
- •32. История создания эвм. Поколения и классы эвм. Структура
- •46. Общая характеристика операционной системы Linux. Основные
- •67. Понятие нормальной формы отношений. Условия нахождения бд
- •1.3D моделирование в компьютерной графике
- •2. Case-средства. Работа с case-средством Erwin. Логическая и
- •4. Алгоритм декомпозиции отношения с целью его нормализации.
- •7. Архивирование данных. Преимущества и недостатки современных
- •12. Баухауз и его вклад в развитие мирового дизайна.
- •13. Бизнес - цели и жизненный цикл изделия
- •15. Василий Кандинский – теория цвета. Психология цвета.
- •16. Векторная и растровая графика, основные понятия, области
- •18. Виды обеспечения систем компьютерной графики.
- •21. Единый формат векторной графики.
- •Пример использования tadoConnection
- •Пример использования параметров запроса
- •Синхронизация данных клиента и сервера.
- •Работа с транзакциями
- •Пример работы с транзакциями
- •Доступ к данным
- •Пример работы с отложенными изменениями.
- •Cals-идеология
- •Cals-технологии
- •Cals-системы
- •Плюсы и минусы
- •28. Использование векторной и растровой графики в web.
- •30. Использование международных стандартов.
- •34. Конструктивизм в художественном дизайне.
- •35. Кривая Безье, ее построение и редактирование.
- •13.1. Определение класса
- •13.1.1. Данные-члены
- •13.1.2. Функции-члены
- •13.1.5. Объявление и определение класса
- •13.2. Объекты классов
- •13.4. Неявный указатель this
- •13.4.1. Когда использовать указатель this
- •38. Мастера модерна. А. Ванде Вельде, ч. Р. Макинтош.
- •43. Обеспечение информационной безопасности.
- •44. Области применения компьютерной графики.
- •48. Оптические устройства хранения информации. Виды и основные
- •50. Основные принципы cals.
- •52. Основные структурные элементы эвм (материнские платы,
- •Основные характеристики шрифтов
- •Художественный облик шрифтов
- •55. Основы композиции в промышленном дизайне. Категории
- •Оператор break
- •Оператор return
- •60. П. Беренс – первый промышленный дизайнер.
- •61. Параллельное и последовательное моделирование
- •62. Параметризация в компьютерной графике.
- •63. Первые теории дизайна Дж. Рескин, г. Земпер, ф. Рело.
- •65. Понятие ключа, первичного ключа, индекса.
- •Первая нормальная форма (1nf)
- •Вторая нормальная форма (2nf)
- •Третья нормальная форма (3nf)
- •Методы решения
- •Процедура принятия решений
- •4. Отчеты - позволяют обобщать и распечатывать информацию. Создание базы данных
- •Создание формы
- •Вызовы sql в pl/sql-ном блоке
- •Вызовы sql в pl/sql-ном блоке
- •См. Вопрос 122 fat32. Чем она лучше fat16?
- •Оттенки фиолетового
- •Оттенки синего
- •Оттенки зеленого
- •Оттенки желтого
- •Цветовая гармония
- •Восприятие цвета
- •Различие между цветами Различные источники света
- •Различная ориентация
- •Различия в восприятии размера
13.1.2. Функции-члены
Пользователям, по-видимому, понадобится широкий набор операций над объектами типа Screen: возможность перемещать курсор, проверять и устанавливать области экрана и рассчитывать его реальные размеры во время выполнения, а также копировать один объект в другой. Все эти операции можно реализовать с помощью функций-членов.
Функции-члены класса объявляются в его теле. Это объявление выглядит точно так же, как объявление функции в области видимости пространства имен. (Напомним, что глобальная область видимости – это тоже область видимости пространства имен. Глобальные функции рассматривались в разделе 8.2, а пространства имен – в разделе 8.5.)
Определение функции-члена также можно поместить внутрь тела класса:
class Screen {
public:
// определения функций home() и get()
void home() { _cursor = 0; }
char get() { return _screen[_cursor]; }
// ...
};
home() перемещает курсор в левый верхний угол экрана; get() возвращает символ, находящийся в текущей позиции курсора.
Функции-члены отличаются от обычных функций следующим:
функция-член объявлена в области видимости своего класса, следовательно, ее имя не видно за пределами этой области. К функции-члену можно обратиться с помощью одного из операторов доступа к членам – точки (.) или стрелки (->):
ptrScreen->home();
myScreen.home();
(в разделе 13.9 область видимости класса обсуждается более детально);
функции-члены имеют право доступа как к открытым, так и к закрытым членам класса, тогда как обычным функциям доступны лишь открытые. Конечно, функции-члены одного класса, как правило, не имеют доступа к данным-членам другого класса.
Функция-член может быть перегруженной (перегруженные функции рассматриваются в главе 9). Однако она способна перегружать лишь другую функцию-член своего класса. По отношению к функциям, объявленным в других классах или пространствах имен, функция-член находится в отдельной области видимости и, следовательно, не может перегружать их. Например, объявление get(int, int) перегружает лишь get() из того же класса Screen:
class Screen {
public:
// объявления перегруженных функций-членов get()
char get() { return _screen[_cursor]; }
char get( int, int );
// ...
};
(Подробнее мы остановимся на функциях-членах класса в разделе 13.3.)
13.1.5. Объявление и определение класса
О классе говорят, что он определен, как только встретилась скобка, закрывающая его тело. После этого становятся известными все члены класса, а следовательно, и его размер.
Можно объявить класс, не определяя его. Например:
class Screen; // объявление класса Screen
Это объявление вводит в программу имя Screen и указывает, что оно относится к типу класса.
Тип объявленного, но еще не определенного класса допустимо использовать весьма ограниченно. Нельзя определять объект типа класса, если сам класс еще не определен, поскольку размер класса в этом момент неизвестен и компилятор не знает, сколько памяти отвести под объект.
Однако указатель или ссылку на объект такого класса объявлять можно, так как они имеют фиксированный размер, не зависящий от типа. Но, поскольку размеры класса и его членов неизвестны, применять оператор разыменования (*) к такому указателю, а также использовать указатель или ссылку для обращения к члену не разрешается, пока класс не будет полностью определен.
Член некоторого класса можно объявить принадлежащим к типу какого-либо класса только тогда, когда компилятор уже видел определение этого класса. До этого объявляются лишь члены, являющиеся указателями или ссылками на такой тип. Ниже приведено определение StackScreen, один из членов которого служит указателем на Screen, который объявлен, но еще не определен:
class Screen; // объявление
class StackScreen {
int topStack;
// правильно: указатель на объект Screen
Screen *stack;
void (*handler)();
};
Поскольку класс не считается определенным, пока не закончилось его тело, то в нем не может быть данных-членов его собственного типа. Однако класс считается объявленным, как только распознан его заголовок, поэтому в нем допустимы члены, являющиеся ссылками или указателями на его тип. Например:
class LinkScreen {
Screen window;
LinkScreen *next;
LinkScreen *prev;
};
Упражнение 13.1
Пусть дан класс Person со следующими двумя членами:
string _name;
string _address;
и такие функции-члены:
Person( const string &n, const string &s )
: _name( n ), _address( a ) { }
string name() { return _name; }
string address() { return _address; }
Какие члены вы объявили бы в секции public, а какие – в секции private? Поясните свой выбор.
Упражнение 13.2
Объясните разницу между объявлением и определением класса. Когда вы стали бы использовать объявление класса? А определение?
