Программирование >>  Расширенная версия языка c++ 

1 ... 18 19 20 [ 21 ] 22 23 24 ... 227


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,.,.



1 ... 18 19 20 [ 21 ] 22 23 24 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика