И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина





НазваниеИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина
страница14/32
Дата публикации01.09.2013
Размер1.4 Mb.
ТипЛекция
100-bal.ru > Информатика > Лекция
1   ...   10   11   12   13   14   15   16   17   ...   32

2. Создание, инициализация и удаление объектов


В Си++ объекты, как и переменные других типов, могут создаваться автоматически или динамически. Автоматическая переменная создается компилятором пир входе в ее область видимости, а при выходе из нее удаляется (т.е. освобождается занятая переменной память).

При автоматическом создании объектов Си++ обеспечивает неявную инициализацию. Это делается с помощью конструкторов. Конструктор – это функция-член, имя которой совпадает с именем класса. У конструктора нет возвращаемого значения. Конструктор неявно вызывается каждый раз, когда создается объект данного класса. Это происходит или при объявлении автоматической переменной-объекта, или при вызове оператора new для динамического создания объекта.

Рассмотрим следующее описание класса "комплексное число" (приведена часть этого описания):
class CComplex {

public:

CComplex()

{ re = im = 0.0; }

CComplex( double re_val )

{ re = re_val; im = 0; }

CComplex( double re_val, double im_val )

{ re = re_val; im = im_val; }

...

private:

double re, im;

};
Как и обычные функции и функции-члены, конструкторы в Си++ могут быть перегруженными. В приведенном примере задаются три конструктора класса, которые оформлены как встраиваемые функции. Эти конструкторы позволяют инициализировать комплексное число, задавая только вещественную часть или обе части числа. Конструктор по умолчанию (без параметров) приравнивает обе части числа нулю. Ниже приведены примеры создания автоматических переменных-объектов класса CComplex с помощью различных конструкторов:

CComplex pi = 3.14159; // Конструктор с одним параметром

CComplex e( 2.71 ); // Конструктор с одним параметром

CComplex i(0, 1); // Конструктор с двумя параметрами

CComplex c; // Конструктор без параметров

При динамическом создании объектов используется оператор new, за которым следует имя класса и параметры конструктора, например:

CComplex* pc = new CComplex( 3.14159, -1.0 );

Можно создать массив объектов, если указать его размер в квадратных скобках. Инициализация элементов массива производится с помощью конструктора "по умолчанию" (конструктора без параметров):

CComplex c_arr1[25];

CComplex* c_arr2 = new CComplex[25];

Динамически созданные объекты, как и обычные динамические переменные, надо удалять с помощью оператора delete (или delete[] в случае массива объектов). В классе можно определить специальную функцию-деструктор, которая будет автоматически вызываться при удалении объекта. Имя деструктора совпадает с именем класса, но ему предшествует символ "тильда" (~). У деструктора нет ни параметров, ни возвращаемого значения.

В следующем примере показано применение конструктора и деструктора в служебном трассировочном классе (который выдает в стандартный поток вывода сообщения, сигнализирующие о порядке выполнения программы). Класс CTrace позволяет отследить, в каком порядке вызываются функции и какие блоки операторов выполняются внутри них. Конструктор класса получает указатель на строку с названием трассировочной точки. В конструкторе создается внутренняя копия сообщения, которая хранится внутри объекта. Печать сообщения выполняется дважды: в конструкторе, когда создается объект CTrace, и в деструкторе, когда этот объект удаляется. Удаление объекта происходит при выходе из области видимости трассировочного объекта. В деструкторе также производится удаление внутренней для объекта копии сообщения.
class CTrace {

public:

CTrace( char* );

~CTrace();

private:

char* msg;

};
CTrace::CTrace( char* s )

{

msg = new char[ strlen(s) + 1 ];

strcpy( msg, s );

cout << "Начало фрагмента " << msg << "\n";

}
CTrace::~CTrace()

{

cout <<"Конец фрагмента " << msg << "\n";

delete msg;

}
В отладочных целях программист размещает в каждой функции, подлежащей трассировке, описание объекта класса CTrace с соответствующим сообщением. Этому объекту не посылается никаких сообщений, т.к. его назначение – только обозначить в трассировочном протоколе вход и выход в данную область видимости. Рассмотрим две функции:
void functionA()

{

CTrace t( "functionA" );

functionB( 10 );

}
void functionB( int x )

{

CTrace t( "functionB" );

if ( x < 5 )

{

CTrace t( "functionB: ветвь для обработки x < 5" );

...

}

else

{

CTrace t( "functionB: ветвь для обработки x >= 5" );

...

}

...

}
Если в программе сначала вызывается функция functionA(), то в трассировочном протоколе объекты класса CTrace покажут порядок выполнения функций functionA() и functionB() следующим образом:
Начало фрагмента functionA

Начало фрагмента functionB

Начало фрагмента functionB: ветвь для обработки x >= 5

Конец фрагмента functionB: ветвь для обработки x >= 5

Конец фрагмента functionB

Конец фрагмента functionA

1   ...   10   11   12   13   14   15   16   17   ...   32

Похожие:

И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconИ. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПротокол №5 От 12 января 2012 г Заседания кафедры электроники и вычислительной...
Зав кафедрой Хакимова Г. Г. сообщила, что кафедра проводит 2-й Чемпионат по цифровой схемотехнике
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по подготовке, оформлению, предзащите и...
В. А. Усков, заместитель декана естественно-географического факультета по развитию, доцент кафедры физической географии и методики...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПроблемы коммуникации
М. Е. Евсевьева (зав кафедрой, доцент А. А. Ветошкин); С. А. Борисова, директор Института международных отношений Ульяновского государственного...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
Елена Святославовна Симакова, кандидат педагогических наук, доцент кафедры гуманитарных и естественнонаучных дисциплин Рязанского...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма курса по выбору «Орнитология» предназначена для студентов...
Автор программы: к б н., доцент, зав кафедрой биологии и химии Марина Николаевна Харламова
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРоссийской Федерации Федеральное государственное образовательное...
Петренко И. М., зав кафедрой экономической теории, д-р экон наук профессор Дулин М. П., зав кафедрой педагогики и психологии, д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРахманкулова Людмила Кузьминична, кандидат филологических наук, доцент...
Автор программы: С. А. Виноградова, кандидат филологических наук, доцент, зав кафедрой английского языка и английской филологии
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconПрограмма по формированию навыков безопасного поведения на дорогах...
...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconЛингвистические проблемы
Московского государственного педагогического института иностранных языков им. М. Тореза (зав кафедрой доцент Ю. А. Денисенко); д-р...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМгпу учебно-методический комплекс дисциплины
А. В. Прялухина, кандидат психологических наук, доцент, зав кафедрой психологии Российского государственного социального университета...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «теория экономического анализа»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconРабочая программа по дисциплине «международный менеджмент»
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconМетодические рекомендации по написанию курсовых работ дисциплине
Рецензент: к с н., доцент, зав кафедрой «Экономики и управления на предприятии и маркетинга» Пятигорского государственного гуманитарно-технологического...
И. П. Гиривенко к т. н., доцент, зав кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С. А. Есенина iconУчебное пособие Краснодар 2008
В. А. Оробец); кафедра паразитологии и ветсанэкспертизы Донского государственного аграрного университета (зав кафедрой, проф., к...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск