Шаг 15 - Что такое статический класс в классическом понятии

Мы сейчас посмотрим на примере Borland C++ для DOS. Так понятнее, для нас главное идея. А в следующем шаге посмотрим, как работает тоже самое в управляемом коде. Объявим класс и создадим объект.

class CMyClass
{
public:
	CMyClass();
	int x;
	char c;
};

CMyClass::CMyClass()
{
	x=5;
	c='a';
}

void main()
{
	CMyClass s;
}

И соберем проект. Я поставил оптимизацию по скорости. Смотрим размер:

15_1.gif (2603 b)

Теперь объявим массив классов:

CMyClass s[100];

И опять смотрим размер:

15_2.gif (1264 b)

Изменился, но не значительно. Правильно, это не статический класс. Хотя выглядит похоже. BC++ за нашей спиной производит всякие манипуляции. Статический класс этот тот класс, память под который находиться внутри модуля EXE. Изменим класс модификатором static.

static CMyClass s[100];

И посмотрим свойства:

15_3.gif (1247 b)

Другое дело. Мы даже место можем увидеть, если посмотрим EXE в блокноте.

15_4.gif (1109 b)

Не верите? Объявите массив int в классе:

class CMyClass
{
public:
	CMyClass();
	int x[100];
	char c;
};

И опять посмотрите:

15_5.gif (4277 b)

Вот оно. В MS DOS это место было ограничено и нельзя было создать большой массив. Так вот практически все классы, которые Вы создаете в VC++ по факту динамические, потому что в динамической памяти находятся даже, если Вы не используете NEW.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 08.07.2002