Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Глава 4. Возвращаемые значения

Новости из жизни Microsoft: разработан
женский Windows 98. К кнопкам "да" и "нет"
добавлена третья - "может быть".

В детстве, когда я только начал изучать программирование, самой первой непонятной вещью для меня были "Return Values" - значения, возвращаемые вызванной функцией.

Сейчас попробую Вам рассказать так, чтобы было понятно. Есть функция - например, "синус". Мы вызываем эту функцию, написав, обычно, в программе

y = sin(x) ;

Надеюсь, вы догадываетесь, что в тексте программы такая строка означает не уравнение, которое нужно решить. Если не догадываетесь, объясняю: мы вызываем функцию "синус", подсунув ей какое-то число "х". Функция вычисляется и результат вычисления синуса присваивается переменной "у". Так вот это вычисленное функцией значение и называется "возвращаемым значением". Любая функция всегда возвращает какое-либо значение в то "место", откуда она была вызвана. Причем, мы можем написать в программе просто

sin(x) ;

При этом функция "синус" вычислит значение синуса "х", и обязательно вернет это значение. Вот только в этом случае оно ничему не присвоится и пропадет.

А теперь вернемся в главу 2 - где мы создавали сообщения с помощью команды MessageBox. MessageBox - это тоже функция. Мы ее вызываем, подсовывая (передавая) ей некоторые значения (тексты) и параметры-флаги. Эта функция рисует на экране окно сообщения. Когда мы нажимаем на кнопку в этом сообщении - именно в этот момент функция считается полностью выполненной - и ВОЗВРАЩАЕТ вызвавшей ее программе какое-то значение. Что она может возвращать? Вспомним,что мы рассматривали возможные варианты сообщений - с тремя кнопками. Так вот, значение, которое вернет функция MessageBox, будет зависеть от того, на какую кнопку мы (пользователь программы) нажмем.

Давайте научим нашу программу понимать, на какую кнопку в сообщении мы нажали. Заодно и познакомимся с оператором "если" - "if". Введем в наше обычное место в файле "2000dlgc.cpp" следующие строки:

        void T2000DlgClient::BNClickedOne()
{
        // INSERT>> Your code here.
        if ( (MessageBox("Вы нажали на кнопку\nСпасибо Вам за это!",
        "Наше сообщение", MB_YESNO | MB_ICONINFORMATION) ) == IDYES)
{
MessageBox("А теперь Вы нажали\nна кнопку YES/ДА",
                        "Наше второе сообщение", MB_ОК | MB_ICONWARNING);
                }
else
{
MessageBox("А теперь Вы нажали\nна кнопку NO/НЕТ",
                        "Наше второе сообщение", MB_ОК | MB_ICONSTOP);
                }
}

Обратите внимание, что в нашем первом сообщении мы указали флаг MB_YESNO вместо MB_ОК - в результате мы получим окно сообщения с двумя кнопками - "ДА" и "НЕТ". Далее - в принципе, мы могли бы добавить в программу новую переменную, потом присваивать ей значение, возвращаемое функцией MessageBox - точно так же, как мы действуем с функцией "синус"; а потом мы сравнили бы эту переменную с IDYES и т.д. Но зачем нам лишние переменные? Мы сразу сравниваем функцию MessageBox (а точнее - значение, ею возвращаемое) с интересующим нас значением, а именно IDYES. Вот в этой части -

if ( (MessageBox(...) ) == IDYES)

и происходит сравнение. Знак "==" - это логический оператор "равно". Я сам до сих пор, когда пишу программы, путаю его с оператором присвоения - одиночным знаком "=". Ошибка страшная - поскольку с точки зрения языка это все допустимо - и компилляция не выдает ошибки - а программа работает не так, как задумано.

Но вернемся к нашей программе. Уточним теперь синтаксис оператора "если":

if ( условие )
                {
действие, выполняемое, если условие истинно
                }
        else
{
действие, выполняемое, если условие ложно
                }

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

if ( условие )
                {
действие, выполняемое, если условие истинно
                }

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

В нашем примере программа будет работать следующим образом: Дойдя до строки с оператором "если", она полезет внутрь - к условию сравнения. Там она выяснит, что в одной из частей, подлежащих сравнению, должно стоять значение, возвращаемое функцией MessageBox. Программе "придется" вызвать эту функцию, в результате чего мы увидим на экране наше сообщение с двумя кнопками - см.рис.4.1.

Рисунок 4.1. Сообщение с двумя кнопками.

Затем программа будет ждать, пока мы не нажмем одну из кнопок. Как только мы это сделаем, функция MessageBox вернет программе одно из двух значений - IDYES, если мы нажали кнопку YES, или IDNO, если мы нажали кнопку NO. Программа возьмет это значение и проверит, не равно ли оно второй части условия - а там мы записали IDYES. Если равно - значит, условие истинно - и программа выполнит то, что написано в первых фигурных скобках - т.е. снова вызовет функцию MessageBox, но уже с другими параметрами - и появится сообщение о том, что мы нажали кнопку ДА. Если же условие окажется ложным, то программа выполнит то, что написано в фигурных скобках после слова "иначе" ("else") - и появится сообщение о нажатии нами кнопки НЕТ.

Галявов И.Р. e-mail: cborland@mail.ru

[ Назад | Оглавление | Далее ]










helloworld.ru © 2001-2021
Все права защищены