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
Объясните разницу между объявлением и определением класса. Когда вы стали бы использовать объявление класса? А определение?
- 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?
- Оттенки фиолетового
- Оттенки синего
- Оттенки зеленого
- Оттенки желтого
- Цветовая гармония
- Восприятие цвета
- Различие между цветами Различные источники света
- Различная ориентация
- Различия в восприятии размера