КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Return x; нет этой инструкции, ведь функция так ничего не вернет!} void main ( void ) { cout<<endl<<"vvedite a, x1, x2 "; float x1, a, x2; cin>>a>>x1>>x2; float vir1; countX (x1*x1, x2,pi, M_PI_2); float vir2; countX(x2, x1 + 1.2, 0, vir2); float x=1/11. + a * vir1 + 1 / vir2; cout<< endl <<"X = "<<x; getch(); } Пояснения к работе программы в этом варианте. Программа начинает работать с функции main. Попрежнему первая исполняемая инструкция-выражение сout << endl << "vvedite a, x1, x2 "; выводит на экран подсказку. Следующая инструкция-выражение вводит информацию с клавиатуры в три объекта a, x1, x2.Пользователь ввел a равное 1, x1 равное 2, x2 равное 3. В инструкции-выражении countX ( x1*x1, x2, M_PI_2, vir1); выполняется оператор ( )вызова функции, где четвертым параметром, получаемым по ссылке на float,указан объект vir1. При вызове функции countX эта функция принимает первый фактический параметр по значению ( получает результат вычисления выражения x1*x1,равное 4) и для хранения этого значения 4 в объекте–функции countX создается локальный объект с именем а, тип которого float (т.к. первый формальный параметр в списке формальных параметров функции float a). Полученное через параметр значение 4 записывается в этот локальный объект а. Так же передаются остальные два фактических параметра – значения 3 из объекта x2 и 1.57 из константы M_PI_2. Для записи этих значений создаются локальные объекты b и c. Здесь механизм тот, который уже был расмотрен. Значения, записанные в локальные объекты а, b и c используются при вычислении значения выражения (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b),а полученный результат, равный 0.02, записывается в объект, имя которого х. А имя х при этом первом вызове функции именует объект vir1,так как в списке формальных параметров при вызове была сделана инициализация 4 параметра: float& x = vir1,то есть имя х в этой фукции назначено новым именем объекта vir1. Этот объект определен в функции main, следовательно информация вычисленная в функции countX инструкцией x = (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b); ее оператором присвоить записывается в объект с именем х , которое именует объект vir1. Информация из области функции countX попадает в область другой функции- функции main. При втором вызове функции countX в инструкции-выражении countX( x2, x1 + 1.2, 0, vir2); выполняется оператор () вызова функцииcountX, где четвертым параметром, получаемым по ссылке на float,указан объект vir2. Значения, полученные в локальные объекты а, b и c при этои вызове используются при вычислении значения выражения (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b),а полученный результат, равный теперь -0.09, записывается в объект, имя которого в этой функции попрежнему х. А это имя при этом новом вызове функции именует объект vir2,так как в списке формальных параметров при этом вызове была сделана инициализация 4 параметра: float& x = vir2,то есть имя х в этой фукции будет новым именем объекта vir2. Этот объект попрежнему определен в функции main. Таким образом информация вычисляется функцией countX винструкции x = (a * cos(b + c) - b * sin(a + c)) / (pow(a,3) + b * b); Оператором присвоить эта инструкция записывает результат в область памяти другой функции, в область памяти объекта vir2.
(Технически такой механизм передачи объекта по ссылке использует все тот же механизм передачи через параметры по значению адреса передаваемого объекта, например, vir1.Но к полученному по значению адресу объекта vir1,автоматически применяется оператор взятия объекта и таким образом, обеспечивается работа не с переданным адресом объекта, а с самим объектом, определенным в другой функции).
По ссылке можно передать объект, тип которого обязательно должен совпадать с типом, на который сделана ссылка.
|