13.2. Объекты классов
Определение класса, например Screen, не приводит к выделению памяти. Память выделяется только тогда, когда определяется объект типа класса. Так, если имеется следующая реализация Screen:
class Screen {
public:
// функции-члены
private:
string _screen;
string:size_type _cursor;
short _height;
short _width;
};
то определение
Screen myScreen;
выделяет область памяти, достаточную для хранения четырех членов Screen. Имя myScreen относится к этой области. У каждого объекта класса есть собственная копия данных-членов. Изменение членов myScreen не отражается на значениях членов любого другого объекта типа Screen.
Область видимости объекта класса зависит от его положения в тексте программы. Он определяется в иной области, нежели сам тип класса:
class Screen {
// список членов
};
int main()
{
Screen mainScreen;
}
Тип Screen объявлен в глобальной области видимости, тогда как объект mainScreen – в локальной области функции main().
Объект класса также имеет время жизни. В зависимости от того, где (в области видимости пространства имен или в локальной области) и как (статическим или нестатическим) он объявлен, он может существовать в течение всего времени выполнения программы или только во время вызова некоторой функции. Область видимости объекта класса и его время жизни ведут себя очень похоже. (Понятия области видимости и времени жизни введены в главе 8.)
Объекты одного и того же класса можно инициализировать и присваивать друг другу. По умолчанию копирование объекта класса эквивалентно копированию всех его членов. Например:
Screen bufScreen = myScreen;
// bufScreen._height = myScreen._height;
// bufScreen._width = myScreen._width;
// bufScreen._cursor = myScreen._cursor;
// bufScreen._screen = myScreen._screen;
Указатели и ссылки на объекты класса также можно объявлять. Указатель на тип класса разрешается инициализировать адресом объекта того же класса или присвоить ему такой адрес. Аналогично ссылка инициализируется l-значением объекта того же класса. (В объектно-ориентированном программировании указатель или ссылка на объект базового класса могут относиться и к объекту производного от него класса.)
int main()
{
Screen myScreen, bufScreen[10];
Screen *ptr = new Screen;
myScreen = *ptr;
delete ptr;
ptr = bufScreen;
Screen &ref = *ptr;
Screen &ref2 = bufScreen[6];
}
По умолчанию объект класса передается по значению, если он выступает в роли аргумента функции или ее возвращаемого значения. Можно объявить формальный параметр функции или возвращаемое ею значение как указатель или ссылку на тип класса. (В разделе 7.3 были представлены параметры, являющиеся указателями или ссылками на типы классов, и объяснялось, когда их следует использовать. В разделе 7.4 с этой точки зрения рассматривались типы возвращаемых значений.)
Для доступа к данным или функциям-членам объекта класса следует пользоваться соответствующими операторами. Оператор "точка" (.) применяется, когда операндом является сам объект или ссылка на него; а "стрелка"(->) – когда операндом служит указатель на объект:
#include "Screen.h"
bool isEqual( Screen& s1, Screen *s2 )
{ // возвращает false, если объекты не равны, и true - если равны
if (s1.height() != s2->height() ||
s2.width() != s2->width() )
return false;
for ( int ix = 0; ix < s1.height(); ++ix )
for ( int jy = 0; jy < s2->width(); ++jy )
if ( s1.get( ix, jy ) != s2->get( ix, jy ) )
return false;
return true; // попали сюда? значит, объекты равны
}
isEqual() – это не являющаяся членом функция, которая сравнивает два объекта Screen. У нее нет права доступа к закрытым членам Screen, поэтому напрямую обращаться к ним она не может. Сравнение проводится с помощью открытых функций-членов данного класса.
Для получения высоты и ширины экрана isEqual() должна пользоваться функциями-членами height() и width() для чтения закрытых членов класса. Их реализация тривиальна:
class Screen {
public:
int height() { return _height; }
int width() { return _width; }
// ...
private:
short _heigh, _width;
// ...
};
Применение оператора доступа к указателю на объект класса эквивалентно последовательному выполнению двух операций: применению оператора разыменования (*) к указателю, чтобы получить адресуемый объект, и последующему применению оператора "точка" для доступа к нужному члену класса. Например, выражение
s2->height()
можно переписать так:
(*s2).height()
Результат будет одним и тем же.
- 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?
- Оттенки фиолетового
- Оттенки синего
- Оттенки зеленого
- Оттенки желтого
- Цветовая гармония
- Восприятие цвета
- Различие между цветами Различные источники света
- Различная ориентация
- Различия в восприятии размера