|
|
|
| |
Главная С++ (часть 3) Демонстрационная программа
Демонстрационная программа |
Программа, приведенная в листинге 4.4, позволяет проверить все эксперт ментальные конструкции языка, поддерживаемые транслятором. | Листинг 4.4. Программа, содержащая экспериментальные конструкции для С++ // Демонстрирует все экспериментальные конструкции, // обрабатываемые транслятором. #include <iostream> using namespace std; // Создает полиморфный базовый класс. class А { public: virtual void f() { } ; }; // И конкретный подкласс(concrete subclass), class B: public A { public: void f() [} }; int main() { int n[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } ; double dn[] = {1.1, 2.2, 3.3, 4.4 }; cout « "Using a foreach loop.\n"; /* Ключевые слова, такие как foreach или typeof, игнорируются внутри комментариев или строк, заключенных в кавычки. */ //Цикл foreach. foreach(int х in n ) cout « x « ' '; cout « "\n\n"; cout « "Using nested foreach loops.\n"; //Цикл foreach loop с блоком, foreach (double f in dn) { cout « f « ' ' ; cout « f*f « 11 ; //Вложенный цикл foreach. foreach(double f in dn) cout « f/3 « " cout « endl; } cout « endl; cout « "Demonstrate cases statement.\n"; cout « "A cases statement that uses integer constants:\n" // Демонстрация оператора cases, который использует // целые константы, for(int i=0; i < 12; i++) switch(i) { case 0: cout « "case 0\n"; break; cases 1 to б: cout << "cases 1 to 6\n" ; break; case 7: cout « "case 7\n"; break; cases 8 to 10: cout « "cases 8 to 10\n"; break; default: cout « "case ll\n"; cout « "A cases statement that uses character constants:\n" // Демонстрация оператора cases, который использует // символьные константы, for(char ch='a*; ch <= 'e'; ch++) switch(ch) { case 'a': cout « "case a\n"; break; cases 'b' to 'd': cout « "cases b to d\n"; break; case 'e': cout « "case e\n"; } cout « endl; cout « "A repeat/until loop.\n"; // Демонстрация цикла repeat/until. int k = 0; repeat { k++; cout « "k: " « k « " "; } until(k==10); cout « "\n\n"; cout « "Use typeof.\n"; // Демонстрация оператора typeof. A *aPtr; В *bPtr, bObj; // Присваивание базовому указателю // адреса производного объекта. aPtr = &bObj; bptr = &bObj; if(typeof *aPtr same as *bPtr) cout « "aPtr points to same type of object as bPtr\n"; if(typeof *aPtr same as B) cout « "aPtr points to В object\n"; return 0; } После обработки этой программы транслятором получается приведенный в листинге 4.5 код на языке С++. Листинг 4.5. Программа из листинга 4.4, обработанная транслятором { —_--------•>-----------------------------------------------------------------------------------1 // Транслировался исходный файл с расширением ехр. // Демонстрирует все экспериментальные конструкции, // обрабатываемые транслятором. #include <iostream> using namespace std; // Создает полиморфный базовый класс, class А { public: virtual void f() { }; }; II И конкретный подкласс (concrete subclass). class В: public A { Public: void f () {} }; int main() { int n[] = { 1. 2. 3. 4. 5. 6. 7. 8. 9. 10 }; double dn[] = {1.1, 2.2, 3.3, 4.4 }; cout « "Using a foreach loop.\n"; /* Ключевые слова, такие как foreach или typeof, игнорируются внутри комментариев или строк, заключенных в кавычки. */ //Цикл foreach. int _ia - 0; for(int x = n[0]; _ia < ((sizeof n)/(sizeof n[0])); _ia++, x = n[_ia]) cout « x « ' ' ; cout « "\n\n"; cout « "Using nested foreach loops.\n"; //Цикл foreach loop с блоком. int _ib = 0; for(double f = dn[0]; _ib < ((sizeof dn)/(sizeof dn[0])); _ib++, f = dn[_ib]) { COUt « f « ' ' ; COUt « f*f « ' ' ; //Вложенный цикл foreach. int _ic = 0; for(double f = dn[0]; _ic < ((sizeof dn)/(sizeof dn[0])); _ic++. f = dn[_ic]) cout « f/3 « " "; cout « endl; } cout « endl; cout « "Demonstrate cases statement.\n"; cout « "A cases statement that uses integer constants:\n" // Демонстрация оператора cases, который использует // целые константы. for(int i=0; i < 12; i++) switch(i) { case 0: cout « "case 0\n"; break; case 1: case 2: case 3: case 4: case 5: case 6: cout « "cases 1 to 6\n"; break; case 7 : cout « "case 7\n"; break; case 8: case 9: case 10: cout « "cases 8 to 10\n"; break; default: cout « "case ll\n"; } cout « "\n"; cout « "A cases statement that uses character constants:\n"; // Демонстрация оператора cases, который использует // символьные константы, for(char ch=*a'; ch <= *e*; ch++) switch (ch) { case 1a': cout « "case a\n"; break; case 98: case 99: case 100: cout « "cases b to d\n" ; break; case 'e': cout « "case e\n"; } cout « endl; cout « "A repeat/until loop.Xn"; // Демонстрация цикла repeat/until, int k =; 0; do { k++; cout « "k: " « k « " "; } while(!(k==10)); cout « "\n\n"; cout « "Use typeof.\n"; // Демонстрация оператора typeof. A *aPtr; В *bPtr, bObj; // Присваивание базовому указателю адреса производного объекта. aPtr = &bObj; bPtr = &bObj; if(typeid(*aPtr) == typeid(*bPtr)) cout « "aPtr points to same type of object as bPtr\n"; if(typeid(*aPtr) == typeid(B)) cout « "aPtr points to В object\n"; return 0; } Программу на языке С++ (листинг 4.5) можно откомпилировать любым современным компилятором С++ и получить приведенный далее вывод на экран. Using a foreach loop. j 2 3 4 5 6 7 8 9 10 Using nested foreach loops. j.l 1.21 0.366667 0.733333 1.1 1.46667 2.2 4.84 0.366667 0.733333 1.1 1.46667 3.3 10.89 0.366667 0.733333 1.1 1.46667 4.4 19.36 0.366667 0.733333 1.1 1.46667 Demonstrate cases statement. A cases statement that uses integer constants: case 0 cases 1 to 6 cases 1 to 6 cases 1 to 6 cases 1 to 6 cases 1 to 6 cases 1 to 6 case 7 cases 8 to 10 cases 8 to 10 cases 8 to 10 case 11 A cases statement that uses character constants: case a cases b to d cases b to d cases b to d case e A repeat/until loop. k: 1 k: 2 k: 3 k: 4 k: 5 k: 6 k: 7 k: 8 k: 9 k: 10 Use typeof. aPtr points to same type of object as bPtr aPtr points to B object
|
|
|
|
|