|
Программирование >> Программирование на языке c++
с=а+Ь; с= 18+9=27 cout << с endl; Результат: 27 for(int i=0;i<2;i++) int i - это внешнее объявление for(int j=0;j<3;j+=2) int j - это вложенное объявление cout i*j \t; Результат: 0 0 0 2 int j=10; здесь j надо объявлять заново cout endl j endl; Результат: 10 Третья программа демонстрирует использование анонимных объединений. Все необходимые пояснения, имеющие отношение к анонимным объединениям, были даны в §2.6. #include <iostream.h> static union { int a; float b; char c; }; глобальное анонимное объединение может быть только static void main(void) { union { int a; float b; char c; }; это локальное анонимное объединение а=100; ::а=555; cout а endl; Результат: 100 cout << ::а << endl; Результат: 555 Ь=200.123; ;:Ь=555.123; cout b endl; Результат: 200.123 cout ::b endl; Результат: 555.123 с = $ ; ::c = #; cout << с endl; Результат: $ cout ;;c endl; Результат: # Четвертая программа показывает три способа передачи аргументов в функции: по значению (функция fv); через указатель (функция fp); через ссылку (функция fr). #include <iostream.h> void fv(int a) { a++; ) void fp(int* a) { (*a)++; } void fr(int& a) { a++; } void main(void) { int x=1,y=1,z=1; fv(x); cout X end/; Результаг 1 (нет измене- НИИ) fp(&y); cout у endl; Результат: 2 fr{z); cout z endl; Результат: 2 Пятая программа показывает использование ссылок и временных объектов. Следует обратить внимание на объявление временных объектов. Их применение часто приводит к ошибкам. #include <iostream.h> void main(void) { int 1=100; int &ref i=i; cout refj endl; Результат: 100 ref i=200; cout i endl; Результат: 200 ниже указатели в обоих случаях равны, но на разных компьютерах конкретные значения (такие как 0x1c620ffe) могут отличаться cout &refj endl; Результат: 0x1c620ffe cout &i endl; Результат: 0x1c620ffe int j=3; float &f=j; здесь создается временный объект типа float cout f endl; Результаг. 3 f = 1.234; изменение значения временного объекта cout j endl; Результат: 3 cout f endl; Результат: 1.234 Шестая программа переопределяет имя функции (здесь используется рассмотренный выше механизм, называемый function name overloading). В ней используется одно имя (!) для разных функций. Первая из функций имеет все целые параметры, а вторая - все вещественные параметры. #include <iostream.h> int f(int a,int b,int c) { return a+b+c; } float f(float a,float b,float c) { return a+b+c; } void main{void) { int x=1,y=2,z=3; cout f(x,y,z) << endl; Результат: 6 float fx=1.1,fy=2.36,fz=3; cout f(fx,fy,fz) endl; Результат; 6.46 Переопределение имени функции всегда должно быть таким, чтобы оно не приводило к возможной неоднозначности. Нужная версия функции должна быть однозначно идентифицирована (установлена) на основании анализа действительных типов ее аргументов, подставляемых при вызове этой функции. При вызове функции не производится автоматическое преобразование типов, принятое в языке C-t-t-. Другими словами, если надо преобразовать типы, то это необходимо сделать явно, например, для приведенной выше программы можно рассмотреть следующие вызовы функции f: f(fx,y,fz); ошибка -- нельзя различить разные версии функций f(fx,(float)y,fz); нет ошибки, так как выполняется явное преобразование типа и вызывается функция f(float,float,float)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |