Особенности статических членов-данных
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

1. Память под статическую величину выделяется не при создании объекта, а по оператору описания этой величины аналогично глобальной величине. При этом может быть выполнена инициализация этой величины. Отличие состоит в том, что память под эту величину выделяется по оператору описания вне класса с указанием имени класса, к которому относится эта величина. При этом, так как статический тип этой величины указан уже в классе, то в операторе описания не указывается слово static.

Пример

       Class M1

        {….    

       static int k; // статический член-класса

       ……………………………………………

        }; // конец определения класса

int M1::k=4; // М1- класс, в котором описана статический член к

 

2.Так как создание и инициализация статических членов-данных производится вне объекта, то обращение к этой величине может быть выполнено до создания объектов класса, где дано описание статической величины, с помощью статической член-функции.

 

Пример

#include<iostream.h>

#include<conio.h>

#include<string.h>

class m1

{ char kniga[12]; /* текст */

static char zag[120]; /*текст-заголовок , одинаковый для всех объектов*/

public:

static void pech () /* статическая функция печати заголовка*/

{cout<<"zagolovok "<<zag<<endl;}

m1(char * x) /* конструктор для задания текста объекта*/

{strcpy(kniga,x);}

void vivod() /* вывод текста объекта */

{ cout<<”text ”<<kniga<<endl;}

 }; // конец определения класса  m1

 char m1::zag[12]="kniga"; // выделение памяти и инициализация статической переменной

int main() // главная функция

{clrscr();

/*. Обращение к статической функции до создания объекта для выдачи общего заголовка для всех объектов */

m 1:: pech ();

 m1 obj[3]={"ttttt","hhhh","jjj"}; // задания текста в трех объектах

for(int i=0;i<3;i++) /* вывод постоянного заголовка и текста объекта*/

{ m1::pech(); /* 1-ый вариант использования статической функции без указания объекта */

obj[i].vivod();

};

cout<<"--------------"<<endl;

for(i=0;i<3;i++)// вывод постоянного заголовка и текста книги

{ obj[i].pech(); /* 2-ой вариант использование статической функции с указанием объекта*/

obj[i].vivod();

};

return 0;

}

Замечание

1.В этой программе используются 2 варианта обращения к статической функции. Это указано в комментариях.

При исполнении этой программы перед печатью содержимого текстов по каждому объекту печатается один и тот же заголовок - kniga.

2. В начале программы выдан общий инициализированный заголовок - статический член-данное с помощью статической член-функции, который будет использоваться всеми объектами класса m1. Сами же объекты в данной программе создаются после вызова указанной функции.

 

Использование динамической памяти при работе с объектами

Под динамической памятью понимается память, которая выделяется программе не во время трансляции, а во время исполнения программы.

Напомним, что в языке Си++ имеется возможность запрашивать во время исполнения (динамически) память заданного размера для данных по оператору new, который имеет следующий формат

указатель = new тип [количество элементов]

В этом случае тип указателя должен соответствовать типу указателя.

Пример

int *g;

g=new int [12];

По этому оператору выделяется память для 12 элементов целого типа.

Тип выделяемой памяти должен соответствовать типу указателя.

 

Способы использования динамической памяти при обработке объектов

С точки зрения обработки объектов можно выделить два случая использования динамической памяти:

- выделение памяти для всего объекта и для массива объектов.

Пример

Class g1

 {……};

int main()

{ g1 *obj1; g1 * obj2;

obj1=new g1; /* динамический объект obj1 */

obj2=new g1[4]; /* динамический массив из 4-х объектов */

        }

- выделение памяти для членов-данных объекта

Пример

Class g1

{ int * h; // член-данное указатель

…….

g1()

{ h=new int; …….} /*выделение в конструкторе памяти для данного целого типа *}

}; // конец определения класса

 

В данном разделе основное внимание уделено особенностям использования динамической памяти не для создания и обработки целого объекта, а особенностям использования динамической памяти для членов-данных внутри объектов.

Дата: 2019-03-05, просмотров: 218.