Студопедия — Конструктор и деструктор
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Конструктор и деструктор






Среди методов класса есть два специальных, которые называются конструктором и деструктором. Имя конструктора всегда совпадает с именем класса, а имя деструктора - это тильда (~) плюс имя класса. Конструктор вызывается автоматически при создании экземпляра класса, деструктор - при его уничтожении.

Основные свойства:

1. Конструктор представляет собой метод класса, который облегчает вашим программам инициализацию элементов данных класса.

2. Конструктор имеет такое же имя, как и класс.

3. Конструктор не имеет возвращаемого значения.

4. Каждый раз, когда ваша программа создает переменную класса, C++ вызывает конструктор класса, если конструктор существует.

5. Многие объекты могут распределять память для хранения информации; когда вы уничтожаете такой объект, C++ будет вызывать специальный деструктор, который может освобождать эту память, очищая ее после объекта.

6. Деструктор имеет такое же имя, как и класс, за исключением того, что вы должны предварять его имя символом тильды (~).

7. Деструктор не имеет возвращаемого значения.

Конструктор класса SensitiveDetector. Он принимает в качестве параметра имя, которое имеет тип G4String. При создании объекта это записывается так: new SensitiveDetector(«a name»). Кроме того здесь же инициализируются константы, задающие верхний и нижний предел на графике.

SensitiveDetector::SensitiveDetector(G4String name): G4VSensitiveDetector(name), HIST_MAX(25*MeV), HIST_MIN(0.025 *eV) { for(int i = 0; i<1000; i++) counts[i] = 0; }

Основная функция этого класса — ProcessHits(). Всякий раз, когда очередной шаг моделирования попадает в объем, которому принадлежит данный SensitiveDetector, вызывается эта функция.

G4bool SensitiveDetector::ProcessHits(G4Step *step, G4TouchableHistory *hist) {

Получаем кинетическую энергию частицы

double energy = step->GetTrack()->GetKineticEnergy();

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

double bin_width = log10(HIST_MAX/HIST_MIN) / 1000; int index = int(floor(log10(energy/HIST_MIN)/bin_width)); if(index >= 0 && index < 1000 && particleName == "neutron") { counts[index]++; }

Для линейной шкалы заменятся две первые строки на

double bin_width = (HIST_MAX-HIST_MIN) / 1000; int index = int(floor((energy-HIST_MIN) / bin_width));

В последнюю очередь уничтожаем данную частицу, чтобы не регистрировать ее дважды.

step->GetTrack()->SetTrackStatus(fStopAndKill); return true; }

Деструктор ~SensitiveDetector. Эта функция вызывается автоматически при удалении объекта, поэтому здесь удобно разместить вывод результатов в файл.

SensitiveDetector::~SensitiveDetector() {

В Си++ работа с файлами происходит так же, как и с экраном, через потоки. Создаем поток, вывод которого направляется в файл spectrum.csv.

std::ofstream file("spectrum.csv ");

Записываем в файл данные в следующем формате:

«энергия;число отсчетов»

int i; double bin_width; for (i=0;i<channel; i++){ bin_width = log10(25000000/0.025) / (channel+1); Eng[i] = pow(10,bin_width*i)*0.025; file << std::setw(1) << “Energy” << “;” << “Counts” << std::endl; for (i=0; i<channel; i++) { file << std::setw(1) << Eng[i] << “;” << counts[i] << std::endl; } }

 







Дата добавления: 2015-08-11; просмотров: 353. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Дезинфекция предметов ухода, инструментов однократного и многократного использования   Дезинфекция изделий медицинского назначения проводится с целью уничтожения патогенных и условно-патогенных микроорганизмов - вирусов (в т...

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Огоньки» в основной период В основной период смены могут проводиться три вида «огоньков»: «огонек-анализ», тематический «огонек» и «конфликтный» огонек...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия