ria pc game
translate to English   translate to Chinese
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
22 февраля 2019 21:51
Вход Регистрация Забыли пароль ?

megainformatic - для чего нужна карта сайта
Для чего нужна карта сайта ? Современный сайт - это достаточно сложная организационная структура. Поисковый робот - yandex, google или иной может быстрее проиндексировать сайт, если найдёт файл sitemap.xml Это и есть та самая карта сайта Файл sitemap.xml содержит ссылки на все страницы сайта, а также некоторую дополнительную информацию - по частоте обновлений эти
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Создание модели автомобиля

megainformatic - Создание текстурной развертки для модели автомобиля

megainformatic - Создание анимации вращающихся колес автомобиля

megainformatic - игра Нечто: Необъяснимое и в плену желаний

megainformatic - Основы 3D-анимации, экспорт скелетной анимации

megainformatic - Подготовка модели к использованию скелетной анимации

megainformatic - Продолжаем Создание скелета для данной модели

megainformatic - Построение ирерархических связей между объектами и основы 3d анимирования

megainformatic - Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009 

megainformatic - Создание модели броневика (Хэд)

megainformatic cms e-mailer

megainformatic cms e-mailer

megainformatic cms e-mailer

Бесплатная Система Управления Вашим Сайтом - megainformatic cms free

megainformatic - Путешествие в мир 3d

megainformatic - Путешествие в мир 3d - страница 2

megainformatic - Путешествие в мир 3d - страница 3

megainformatic - Путешествие в мир 3d - страница 4

megainformatic - Путешествие в мир 3d - страница 5

megainformatic - Путешествие в мир 3d - страница 6

megainformatic - Создание модели броневика (Хэд) - Анимация вращения колес

megainformatic cms express files

megainformatic cms express files

megainformatic cms express files

megainformatic - Уроки Photoshop - Чудеса

megainformatic cms express files - Развертывание сайта на Вашем хостинге

megainformatic - Настольная игра "Веселый Буквоежка"

megainformatic - Уроки delphi directx 8.1

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения.

megainformatic - Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения. Страница 2

megainformatic - Урок 2 Создаем и обрабатываем команды меню.

megainformatic - Урок 2 Создаем и обрабатываем команды меню. Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 2

megainformatic - Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 3

megainformatic - Урок 4 Построение класса приложения

megainformatic - Урок 4 Построение класса приложения - Страница 2

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов

megainformatic - Урок 5 Построение классов игровых объектов и других необходимых классов - Страница 2

megainformatic - Урок 6 Игровая логика

megainformatic - Заметки по joomla - JFolder::create: Path not in open_basedir paths. Что это?

megainformatic cms express files - Добавление статей на сайт под управлением megainfromatic cms express files

megainformatic - Урок 7 2D-анимация

megainformatic - Урок 8 Загрузка/Сохранение текущей игры, режим паузы, режимы часов/будильника, запуск браузера Internet Explorer для показа сайта разработчика и других интернет-ресурсов

megainformatic - Урок 9 Тестирование и отладка приложения

megainformatic - Мои Музыкальные Миры

megainformatic - уроки Photoshop free

megainformatic cms express

megainformatic cms express

megainformatic cms express

megainformatic cms express files

megainformatic - Методы создания растровых изображений в Adobe Photoshop

megainformatic - Создание фотореалистичной текстуры травы

megainformatic - Рабочее пространство Adobe Photoshop

megainformatic - Бесшовные (тайловые) текстуры

megainformatic - Создание изображений огня, воды, неба

подробнее

Пишем компактный слайдер

В данной статье я рассмотрю как создать слайдер написанный с нуля, в самые минимальные сроки.

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

Вот пример того, как должен работать созданный слайдер -



Замечу, что php код необходимый для работы слайдера был внедрен прямо в текст данной статьи при помощи модуля content php performer. Исходный код этого модуля вы найдёте в статье - Модуль content php performer для megainformatic cms

Теперь рассмотрим собственно исходный код, который составляет основу приведенного выше примера слайдера.

Собственно для внедрения данного модуля вам потребуется любая версия библиотеки jquery (нам будет нужен только метод ready) и нижеприведенный код на php.

Ну и конечно будут нужны несколько изображений, для начала можете использовать те, которые приведены в этом примере.

Итак, что у нас в коде ?

<?php //функции ===========================

//отображаем слайдер
function show_slider()
{
$view = '';

//указываем путь, где будут лежать ваши картинки для слайдера
$pictures_path = 'ПУТЬ_К_КАРТИНКАМ/images/';

$pictures = array();
$pictures_data = array();
//эта функция будет описана ниже, она просто возвращает массив имён файлов картинок и подписей к ним
get_all_pictures($pictures);
$pictures_count = count($pictures);
//очень важный шаг - задаем начальную картинку, с которой начинается показ
$current_picture = 0;

$pictures_limit = $pictures_count - 1;

//а также все данные для этой картинки
$current_picture_data = $pictures[$current_picture];

$pictures_slider_interval = get_pictures_slider_interval();

$view .= '<style>';

//определяем стили, необходимые для отображения нашего слайдера
$view .= '

.eks_slider_holder {
float: left;
width: 620px;
margin: 0;
padding: 0;
position: relative;
top: 0;
left: 0;
z-index: 1;
}
.eks_slider_holder
.eks_slider_frame_container {
float: left;
width: 256px;
height: 256px;
margin: 5px 0 0 1px;
padding: 0;
position: relative;
top: 0;
left: 0;
z-index: 2;
}

.eks_slider_holder
.eks_slider_frame_container
.eks_slider_frame {
width: 260px;
height: 260px;
margin: 0;
padding: 0;
position: relative;
top: 0;
left: 0;
z-index: 100;
background: url('.$pictures_path.'frame.png) no-repeat center center;
}

.eks_slider_holder
.eks_slider_frame_container
.eks_slider_item {
float: left;
width: 256px;
height: 1px;
margin: 0;
padding: 0;

position: relative;
top: -256px;
left: 0;
z-index: 90;

}

.eks_slider_holder
.eks_slider_frame_container
.eks_slider_item_responce {
width: 256px;
height: 130px;
margin: 0;
padding: 0;
}

.eks_slider_holder
.eks_slider_link_next {
float: left;
text-align: center;
margin: 15px 0 0 0;
width: 100%;
padding: 0;
line-height: 18px;
}';

$view .= '</style>';

//здесь указываем путь где лежит библиотека jquery
$view .= '<script type="text/javascript" src="include/js/jquery.js"></script>';

$view .= '<script>
//используем noConflict, если нужно совместное использование с другими библиотеками js, которые уже внедрены
//на вашем сайте (например mootools)
jQuery.noConflict();
//выполняем начальную инициализацию (для этого нам и нужен метод READY и библиотека jquery)
jQuery().ready(function() {
//вообщем-то самый важный шаг - задаем интервал, через который происходит автоматическое листание картинок
intervalID = setInterval(slider_autoslide_picture, '.$pictures_slider_interval.');
});

var picture = 0;

//эта функция просто меняет текущую картинку на следующую
function slider_autoslide_picture()
{
//тут ничего мудреного - запоминаем старую картинку
var old_picture = picture;

//получаем новую - смещением на +1
if ( picture < '.$pictures_limit.' )
picture = picture + 1;
else
//если при этом получим несуществующий индекс - устанавливаем на 0, т. е. на самую первую картинку
picture = 0;

//вот и сам движок слайдера - он ОЧЕНЬ прост - скрываем блок старой картинки и отображаем блок для новой
jQuery(\'#eks_slider_frame_\'+old_picture).css(\'display\', \'none\');
jQuery(\'#eks_slider_item_\'+old_picture).css(\'display\', \'none\');
jQuery(\'#eks_slider_frame_\'+picture).css(\'display\', \'block\');
jQuery(\'#eks_slider_item_\'+picture).css(\'display\', \'block\');
}

//эта функция делает то же самое, только при нажатии ссылок НАЗАД и ВПЕРЕД - вызывая пролистывание на -1 или на +1, так что заострять внимание на коде я не буду, он абсолютно аналогичен предыдущей функции, за исключением того, что вместо +1 используется +op, т. е. вместо op мы можем передать -1 или 1 (т. е. +1)
function slider_prevnext_picture(op)
{
var old_picture = picture;

picture = picture + op;
if ( picture < 0 || picture > '.$pictures_limit.' )
picture = 0;

jQuery(\'#eks_slider_frame_\'+old_picture).css(\'display\', \'none\');
jQuery(\'#eks_slider_item_\'+old_picture).css(\'display\', \'none\');
jQuery(\'#eks_slider_frame_\'+picture).css(\'display\', \'block\');
jQuery(\'#eks_slider_item_\'+picture).css(\'display\', \'block\');
}
</script>';

//это php код, который создает вереницу блоков картинок слайдера и текущий блок делает видимым
$view .= '<div class="eks_slider_holder">';

$view .= '<div class="eks_slider_frame_container">';

for ( $i = 0; $i < $pictures_count; $i++ )

{
$i_current_picture = $i;
$i_current_picture_data = $pictures[$i_current_picture];

$display = 'display: none;';
if ( $i_current_picture == $current_picture )
$display = 'display: block;';

//это рамка, для того, чтобы картинка выводилась со скругленными краями, заметьте что ссылку в <a href нужно ставить именно в рамке, т. к. рамка отображается по z выше, чем сама картинка !!!
$view .= '<div class="eks_slider_frame" id="eks_slider_frame_'.$i_current_picture.'" style="'.$display.'">';
$view .= '<a href="#"><img src="'.$pictures_path.'null.png'.'" border="0" alt="'.$i_current_picture_data['name'].'"
title="'.$i_current_picture_data['name'].'" width="256" height="256"></a>';
$view .= '</div>';

//ну а это уже сама картинка слайдера (очередная)
$view .= '<div class="eks_slider_item" id="eks_slider_item_'.$i_current_picture.'" style="'.$display.'">';
$view .= '<img src="'.$pictures_path.$i_current_picture_data['photo'].'" border="0" alt="'.$i_current_picture_data['name'].'"
title="'.$i_current_picture_data['name'].'" width="256" height="256">';
$view .= '</div>';

}



$view .= '</div>';

//в завершении выводим навигацию - ссылки НАЗАД и ВПЕРЕД
$view .= '<div class="eks_slider_link_next">';
$view .= '<a class="eks_link" href="#site_head" onclick="slider_prevnext_picture(-1);">Назад</a><br>';
$view .= '<a class="eks_link" href="#site_head" onclick="slider_prevnext_picture(1);">Вперед</a>';
$view .= '</div>';

$view .= '</div>';

return $view;
}



//задаем изображения для слайдера - функция, о которой я вам уже говорил выше - тут всё предельно просто
function get_all_pictures(&$pictures)
{
$pictures = array(
0 => array('photo' => '1.jpg', 'name' => 'раз'),
1 => array('photo' => '2.jpg', 'name' => 'два'),
2 => array('photo' => '3.jpg', 'name' => 'три'),
3 => array('photo' => '4.jpg', 'name' => 'четыре'),
4 => array('photo' => '5.jpg', 'name' => 'пять')
);
}



//получить настройку для выставление временной задержки слайдера - тут можем задать интервал, через который будет листаться слайдер, а если Вы хотите вынести эту настройку в админку вашей cms, тогда соответственно тут вам надо реализовать код, который будет брать значение этой настройки из нужного места в базе данных сайта или из нужного файла настроек.
function get_pictures_slider_interval()
{
$interval = 3; //секунд
$interval = $interval * 1000; //миллисекунд

return $interval;
}



//просто отображаем наш слайдер
//исполнение ===========================

echo '<div style="float: left; width: 100%; margin: 0; padding: 0; height: 300px; position: relative; top: 0; left: 0; z-index: 0;">';
echo show_slider();
echo '</div>';
echo '<div style="clear: both;"></div><br><br>';

?>

Вот собственно и всё :) Удачи Вам на ниве сайтостроя !!!





подробнее


[к содержанию] [другие статьи Тимонина Андрея]

Хронология работы программы. Создаем Лог

автор: Тимонин Андрей

дата публикации на сайте Мега Информатик: 17.11.2012

Добро пожаловать в цикл моих уроков посвященных программированию.

Эта статья будет посвящена такому понятию как логи, как их создают и зачем используют.


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

Что из-себя представляет лог? Обычный текстовый файл с расширением log (оно может быть любое). Каждая строчка такого файла содержит штамп времени и некий текст. Это может быть строка ошибки или сообщение о том, что некий ресурс успешно загрузился. Смотрим пример лога:


08:43:32: Creating resource group General
08:43:32: Creating resource group Internal
08:43:32: Creating resource group Autodetect
08:43:32: SceneManagerFactory for type 'DefaultSceneManager' registered.
08:43:32: Registering ResourceManager for type Material
08:43:32: Registering ResourceManager for type Mesh

А теперь ближе к делу. Создадим простейший класс лога:

//log.h

#pragma once
#include <string>
#include <fstream>

class Log
{
protected:
std::ofstream mfpLog; //файловый поток
std::string mName;
public:
Log( const std::string& name); //Конструктор
~Log(); //деструктор
void logMessage(const std::string& message); ///для записи строки
};

А вот так будет выглядеть реализация класса

//log.cpp
#pragma once
#include "Log.h"
#include <time.h>
#include <iomanip>
Log::Log( const string& name )//конструктор
: mName(name)
{
mfpLog.open(name.c_str(),ios::out); //откроем файл лога
}
//-----------------------------------------------------------------------
Log::~Log()//деструктор
{
mfpLog.close(); //закроем файл лога
}
//-----------------------------------------------------------------------
void Log::logMessage( const string& message )
{ struct tm *pTime;
time_t ctTime;
//берем системное время
time(&ctTime);
//получим указатель на структуру времени
pTime = localtime( &ctTime );
//выведем в строку ширина 2 позиции заполнитель 0
mfpLog << std::setw(2) << std::setfill('0') << pTime->tm_hour
<< ":" << std::setw(2) << std::setfill('0') << pTime->tm_min
<< ":" << std::setw(2) << std::setfill('0') << pTime->tm_sec
<< ": " << message << std::endl;
}

Пример использования класса:

//где-то в недрах программы :)
Log mLog ("game.log");
//так пишем сообщения
mLog.logMessage("Ваше сообщение");

На этом статью заканчиваю. Надеюсь, эта информация была вам интересна.
C уважением, Андрей.

[к содержанию] [другие статьи Тимонина Андрея]

подробнее

     
  Уроки Photoshop - Рисуем и анимируем  
     
  Уроки Photoshop - Рисуем и анимируем   
 

Стоимость: 250 руб.

 
     
     
  Введение  
     
 

Эти уроки - плод упорной работы над графикой, которая выполнялась в течение почти года над проектом игры, которая еще не вышла, но выйдет в скором времени.

Вся графика была нарисована в программе Adobe Photoshop. Для просмотра созданных анимаций Вы можете использовать небольшую утилиту - Coords2D

Ссылка для скачивания утилиты Coords2D



Скачать Coords2D -


Размер sfx-архива: 36 Mb. Также содержит много примеров спрайтов и других
изображений из проекта fle, bol и др.

Все наши уроки будут посвящены рассмотрению приоритетно практических вопросов - как рисовать и создавать анимации в Adobe Photoshop. При этом Вам не нужно приобретать какое-либо специальное оборудование - графический планшет или что-то подобное. Мы будем использовать обычную мышь, с которой Вы давно привыкли работать. Итак, Вы откроете для себя огромный и необъятный мир графики, которую Вы можете создать сами в Adobe Photoshop.

Какую версию Adobe Photoshop использовать ? Решайте сами, исходя из Ваших возможностей и пожеланий. Могу посоветовать Вам любую версию начиная от CS (8) до CS 5 (12).

Что еще нам потребуется ? Только лишь немного свободного времени и желания создать что-то красивое и совершенное. А как же опыт ? Опыт мы с Вами будем набирать в ходе наших с Вами уроков. Итак, можно начинать !

 
     
 

Какие специальные знания потребуются ? Думаю, что никаких особых знаний не потребуется, единственное, я надеюсь, что Вы обладаете хотя бы базовыми знаниями работы на ПК, т. е. Вам не нужно объяснять как установить Photoshop, как запустить его, как создать папку или файл, открыть изображение.

Если же и этого минимума знаний у Вас пока нет - начните с изучения более простых уроков -

Уроки Photoshop;

Уроки Photoshop - Чудеса;

 
     
  В этом сборнике статей мы рассмотрим следующие темы:  
     
 

1. Старт - данная статья доступна онлайн, т. к. предоставляется как ознакомительная, остальные статьи входят в состав сборника и недоступны онлайн. Вы сможете их прочитать только после заказа всего сборника статей - Уроки Photoshop - рисуем и анимируем. Стоимость всего сборника - 250 руб. После оплаты заказа Вы в кратчайшие сроки получаете ссылку на скачивание ПОЛНОЙ ВЕРСИИ сборника, скачиваете его, распаковываете (сборник содержится в виде самораспаковывающегося архива) и читаете интересующие Вас уроки.

 
     
  2. Прорисовка  
     
  3. Раскраска  
     
  4. Секреты свето-тени  
     
  5. Применение фильтров  
     
  6. Подготовка к анимации персонажа  
     
  7. Создание анимации  
     
  8. Окончальтельный результат анимации, альфа-маска, сохранение файла  
     
  9. Создание кустов травы, тест результатов в Редакторе карт SceneEditor  
     
  10. Создание фона неба и земли, тест в редакторе карт  
     
  11. Деревья  
     
  12. Прочие объекты  
     
  13. Существа - пауки и их анимация  
     
  14. Анимация брошенных предметов  
     
  15. Основы создания тутульной заставки  
     
  16. Элементы меню  
     
  17. Оформление игровых панелей  
     
  18. Рисование обстановки помещений  
     
  19. Основы создания мини-комикса - шаг 1  
     
  20. Основы создания мини-комикса - шаг 2  
     
  21. Основы создания мини-комикса - шаг 3  
     
  22. Игровые экраны - настройки, информация, игровые диалоговые окна  
     
  23. Предметы и находки - лопата, лейка, плитки  
     
  24. Специфические предметы - летающий смех и его анимация  
     
  25. Специальные эффекты - создание и анимация дождя, возникновения/исчезновения объектов/героя/существ  
     
  26. Итоги проделанной работы: Чему мы научились ?  
     
 

Надеюсь, что эти статьи помогли Вам узнать еще больше о возможностях Photoshop и научили более профессиональной работе в этой программе.

Спасибо за внимание и желаю Вам творческих успехов !!!

 
     
     
     
     
     
     
подробнее

 

Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008

 
     
  Урок 1 Основные операторы языка C++ (часть 2)  
     
 

Данный небольшой урок является введением в программирование на C++ в MSVS 2008

Вам нужно иметь установленную среду Microsoft Visual Studio 2005 или 2008 (можно триал)

 
     
  [назад] [далее] [к содержанию]  
     
  Мы рассматриваем основные конструкции языка C++ на примере работы в Microsoft Visual Studio 2008  
     
  В предыдущем уроке мы создали небольшой калькулятор. Этот урок позволил нам бегло познакомиться с некоторыми из конструкций языка C++ и некоторыми функциями.  
     
 

в этом уроке нам осталось рассмотреть

- операторы объявления переменных;

- операторы обработки исключений;

 
     
 

- операторы объявления переменных;

объявление (declaration) переменной сообщает компилятору, что элемент программы или имя существуют. Определения (definitions) определяют какой код или данные описывает имя. Имя должно быть объявлено до того, как оно будет использовано!

Примеры объявлений

// Declare and define int variables i and j. объявление переменных и присвоение начального значения
int i;
int j = 10;

// Declare enumeration suits. объявление перечисления
enum suits { Spades = 1, Clubs, Hearts, Diamonds };

// Declare class CheckBox. объявление класса
class CheckBox : public Control
{
public:
Boolean IsChecked();
virtual int ChangeState() = 0;
};

 
     
 

Объявление (declaration) привносит в программу одно или более имен. Объявления могут производиться в программе многократно. Поэтому классы (classes), структуры (structures), перечисляемые типы (enumerated types) и другие определяемые пользователем типы могут быть объявлены в каждом требующем компиляции модуле. Ограничением такого множественного объявления является необходимость полной идентичности всех объявлений. Объявления могут служить также в качестве определений (definitions) исключая следующее:

- это прототип функции (объявление функции без ее реализации (тела));

- содержит спецификатор extern, но не имеет инициализатора (объекты и переменные) или тела функции (функции). Это означает, что определение не нужно в текущем модуле и применяет к имени внешнее связывание;

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

- это объявление имени класса без последующего определения;

- это оператор typedef;

Примеры объявлений, которые не имеют последующих определений

extern int i;
char *strchr( const char *Str, const char Target );

 
     
 

Несколько слов об определениях (definitions)

Определения являются уникальными описаниями (спецификациями) объектов или переменных, функций, классов или перечислителей (enumerator). Поскольку определения должны быть уникальными, программа может содержать только одно определение для данного программного элемента.

 
     
 

Соответствие между объявлениями и определениями сводятся к одному. Существуют два случая в которых программный элемент может быть объявлен и не определен:

- функция объявлена, но ни разу не вызывается или не используется выражений требующих адреса данной функции;

- класс используется только таким образом, что не требует определения. Однако класс должен быть объявлен.

Вот пример демонстрирующий указанный случай:

// definitions.cpp
class WindowCounter; // Forward reference; no definition

class Window
{
// Definition of WindowCounter not required
static WindowCounter windowCounter;
};

int main()
{
}

 
     
  Также советую Вам прочесть раздел документации MSVS 2008 посвященный авто-создаваемым и статичным объектам - MSVS 2008 Documentation (далее просто Help) - Development Tools and Languages > Visual Studio > Visual C++ > Reference > C/C++ Languages > C++ Language Reference > Statements > Declaration Statements  
     
 

- операторы обработки исключений;

информацию по ним вы найдете в Help - Development Tools and Languages > Visual Studio > Visual C++ > Reference > C/C++ Languages > C++ Language Reference > Statements > Exception Handling

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

Базовыми операторами для этих целей являются try, catch и throw

 
     
  try {
// code that could throw an exception
}
[ catch (exception-declaration) {
// code that executes when exception-declaration is thrown
// in the try block
}
[catch (exception-declaration) {
// code that handles another exception type
} ] . . . ]
// The following syntax shows a throw expression:
throw [expression]
 
     
 

Язык C++ обеспечивает встроенную поддержку обработки аварийных ситуаций, известных как исключения (exceptions), которые могут происходить во время выполнения Вашей программы. Операторы try, throw и catch реализуют обработку исключений. При использовании обработки C++ исключений Ваша программа может взаимодействовать с непредвиденными событиями при высокоуровневом исполнимом контексте, который способен лучше реагировать на такие аварийные события. Такие исключения обрабатываются кодом находящимся вне основного потока выполнения программы.

Рассмотрим как работает тройка операторов try, catch, throw

Код после оператора try представляет защищенную секцию кода. Выражение появления исключения (throw expression) вызывает исключение (raises exception). Блок кода после catch это обработчик исключения захватывающий (обрабатывающий) исключение появившееся в выражении появления исключения. Оператор объявления исключения (exception-declaration) указывает на тип исключения обрабатываемого оператором catch. Таким типом может быть любой действительный тип данных, включая класс C++. Если оператор объявления исключения содержит многоточие (...), оператор catch обрабатывает любые типы исключений, включая исключения на C и сгенерированные системой и приложениями, такие как защита прав доступа к памяти, деление на ноль, переполнение числа с плавающей точкой. Такой обработчик должен быть последним из всех обработчиков блока try.

Операнд при операторе throw синтаксически подобен операнду оператора return.

Исполнение происходит в следующей последовательности:

1. Управление достигает оператора try при нормальном последовательном выполнении. Защищенная секция внутри блока try исполняется.

2. Если исключений во время выполнения защищенной секции кода не произойдет, оператор catch, следующий за блоком try не будет выполнен. Исполнение продолжается начиная с оператора следующего за последним оператором catch в том блоке try в котором отслеживается (thrown) исключение.

3. Если исключение произошло (thrown) во время выполнения защищенной секции кода или в любой процедуре защищенной секции (при прямом или косвенном вызове), будет создан объект исключения из объекта представленного операндом при операторе throw. (Это подразумевает, что будет вовлечена копия конструктора). Начиная с этого места компилятор отыскивает оператор catch в высокоуровневом контексте исполнения, который способен обработать исключение с произошедшим (thrown) типом (или обработчик catch, который способен обрабатывать любые типы исключений). Обработчики catch проверяются в порядке представления в блоке try. Если требуемый обработчик отсутствует проверяется следующий динамически замкнутый try - блок. Этот процесс продолжается до тех пор, пока не закончится внешний замкнутый try - блок.

4. Если подходящий обработчик так и не найден или если исключение произошло во время развертывания, но до получения управления обработчиком, вызывается предопределенная функция времени выполнения terminate. Если исключение произошло после прохождения по блоку throw, но до начала развертывания, вызывается terminate.

5. Если требуемый обработчик catch найден, и он захвачен по значению, его формальный параметр инициализируется копированием объекта исключения. Если он захвачен по ссылке, параметр инициализируется ссылкой на объект исключения. После инициализации формального параметра начинается процесс развертывания стека. Это вызывает разрушение всех автоматических объектов, созданных (но еще не уничтоженных), между началом блока try соответствующего обработчику catch и местом срабатывания (throw) исключения. Разрушение происходит в порядке обратном порядку создания. Обработчик catch исполняется и программа продолжает выполнение со следующей за последним обработчиком строки (т.е. с первого оператора или конструктора не являющегося обработчиком catch). Управление может передаваться на обработчик catch только для сработавших (thrown) исключений и никогда посредством операторов goto или метки case оператора switch.

 
     
 

Следующий пример из документации по MSVS показывает использование блока try и соответствующего ему обработчика catch. Пример определяет ошибку выделения памяти при использовании оператора new. Если new прошел успешно catch обработчик не будет исполнен:

// exceptions_trycatchandthrowstatements.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
char *buf;
try {
buf = new char[512];
if( buf == 0 )
throw "Memory allocation failure!";
}
catch( char * str ) {
cout << "Exception raised: " << str << '\n';
}
}

 
     
  в следующем уроке мы познакомимся с особенностями создания оконных Win32-приложений  
     
     
     
     
     
  [назад] [далее] [к содержанию]  

первый независимый онлайн-журнал комиксов ККК Костя Коробкин Комикс номер 1 март 2016

первый независимый онлайн-журнал комиксов ККК Костя Коробкин Комикс номер 1 март 2016

если кликать картинку она будет последовательно меняться в размерах от 620 до 2048 пиксель.

 

Приключения Кости Коробкина - Как я провел лето - интерактивный комикс (akk hiss) - теперь можно читать онлайн !!!


Приключения Кости Коробкина - Как я провел лето - интерактивный комикс - читать онлайн
Костя Коробкин (akk hiss)
Привет ! Меня зовут КОСТЯ КОРОБКИН. Этим летом я гостил у бабушки на даче и там со мной случилась одна история... читать онлайн
 
     
 

Приключения Кости Коробкина - С новым годом - интерактивный комикс (kk hny) - читать онлайн


Приключения Кости Коробкина - С новым годом - интерактивный комикс - читать онлайн
Костя Коробкин -
С новым годом
(kk hny)
Костя :- Эта история произошла со мной под новый год. Что-то может показаться вам выдумкой или даже фантастикой, но я Вас уверяю - это было на самом деле !... читать онлайн
 
     
 

Костя Коробкин - Секретный проект - интерактивный комикс (kk scp) - читать онлайн


Костя Коробкин - Секретный проект - интерактивный комикс - читать онлайн
Костя Коробкин -
Секретный проект
(kk scp)
В один прекрасный день Костя Коробкин как обычно летом сел на поезд и отправился к бабушке. Но в пути с ним приключилась одна история... Помимо мистических и таинственных вещей Вы встретитесь с легендарными Петькой и Василием Ивановичем Чапаевым. читать онлайн
 
     
 

Костя Коробкин - В гостях у тёти Светы (kk as) - читать онлайн


Костя Коробкин - В гостях у тёти Светы (kk as) - читать онлайн
Костя Коробкин (kk as)
В предметах и явлениях, которые нас окружают часто кроется нечто большее, чем мы привыкли. Замечать особенное и извлекать из этого пользу я научился совсем недавно... читать онлайн
 
     
megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,0972