![]() |
|
Программирование >> Расширенная версия языка c++
2. Пример использования объединения для побайтного вывода значения типа double в двоичном представлении: , г 1 г . , -.. > ttinclude <iostreain> using namespace std; union bits ( bits(double n); . void 3how bits() ; double d; unsigned char ctsizeof (double)]; bits: :bit3(double n) d = n; void bits: :show bits() i, j ; for( j - sizeo ble) - 1; j >= 0; ) { cou Двоичное представление байта << j for( i = 128; i; - 1) if (.i & c[ j ]) cou 1 ; else cou << 0 ; cout \n ; int main( ) bits ; ob.show bits 0; return 0; Результат работы программы Двоичное представление байта 7: 01000000 Двоичное представление байта 6: 10011111 Двоичное представление байта 5: 00011111 Двоичное представление байта 4: 01010000 Двоичное представление байта 3 : 11100101 return 0; 70 Самоучитель.-С+ + Двоичное представление байта 2: 01100000 Двоичное представление байта 1: 01000001 Двоичное представление байта 0: 10001001 3. Структуры и объединения могут иметь конструкторы и деструкторы. В следующем примере клас type переделан в структуру. В структуре имеются конструктор и деструктор. #include <iostream> #include <cstring> ttinclude <cstdlib> using namespace std; struct strtype { I..-. ... . strtype(char*ptr) ; -strtype() ; void showO ; private: char *p; int len; strtype: :strtype (char *ptr) { len = strlen(ptr); -ч,> - p = (char *) inalloc(len+ 1); v.: if<!p> { cout Опшбка выделения памяти \n ; > exit (1) ; J .-, strcpy{p, ptr) ; :} strtype::-strtype0 cout -< Освобождение памяти но адресу p\n ; - free(p); void strtype: : show() cou p - длинам << len; .,. . .... . cout \n ; int main () strtype ка ) , з2( Мне нравится С++ ); return 0; -. - 4. В следующей программе для побайтного вывода на экран значения типа double используется анонимное объединение. (Предполагается, что длина значения типа double равна восьми байтам.) Использование анонимного объединения / .. .ч- . #±nclude <iostredi-.i> - using namespace std; :t.:> ir::i r- . i ..i-, ,.:>?;.;v :t- ,.ч5;-- : . . -r int main о : rf-r- union { unsigned char bytes[6]; double value; . . }; . ...... int i; ( .V - ., b.lt,..) value = 859345.324; -КЧ. ; v.;; M . побайтный вывод значения типа double for(i=0; i<8; i+ + ) cout (int) bytes[1] ; return 0; Обратите внимание, что доступ к переменным value и bytes осуществляется так, как если бы они были не частью объединения, а обычными переменными. Несмотря на то, что эти переменные объявлены как часть анонимного объединения, их имена находятся в той же области видимости, что и другие объявленные здесь локальные переменные. Именно по этой причине член анонимного объединения не может иметь то же имя, что и любая переменная в данной области видимости. 1. Перепишите класс stack, представленный в разделе. 1, чтобы вместо класса использовалась структура. 2. Используйте объединение, чтобы поменять местами старший и младший байты целого (предполагается 16-битное целое; если ваш компьютер использует 32-битное целое, то меняйте местами байты типа short int). 3. Объясните, что такое анонимное объединение и чем оно отличается от нормального объединения. 31.ShowO; . . р s2, show {) ; I < *- Ci>..(. i,.,.
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |