Buscar

APêndices e final

Prévia do material em texto

Apêndice A 
Tabela de precedência dos operadores 
Os operadores são apresentados em ordem decrescente de precedência, de cima para baixo. 
Fig. A.1 Tabela de precedência de operadores (parte 1 de 2). 
o e 
e [e 
Operador 
Tipo 
Associatividade 1 
. 
resolução de escopo binário resolução de escopo unário 
esquerda para a direita 
O 
parênteses 
esquerda para a direita 
[] 
subscrito de array 
. 
seleção de membro via objeto 
-> 
seleção de membro via ponteiro 
++ - 
pós-incremento unário pós-decremento unário 
typeid 
informação sobre tipo durante a execução 
dynainic_cast< tipo> 
coerção com verificação de tipo durante a execução 
staticcast< tipo> 
coerção com verificação de tipo durante a compilação 
reinterpretcast< 
tipo> 
coerção para conversões não-padrão 
constcast< tipo> 
retira o atributo const com coerção 
++ 
pré-incremento unário 
direita para a esquerda 
- - 
pré-decremento unário 
+ 
mais unário 
- 
menos unário 
! 
negação lógica unária 
- 
complemento sobre bits unário 
tipo ) 
coerção ao estilo de C unário 
sizeof 
determina o tamanho em bytes 
& 
endereço 
* 
derreferencia 
new 
alocação dinâmica de memória 
new [3 
alocação dinâmica de array 
delete 
desalocação dinâmica de memória 
dele te [3 
desalocação dinâmica de array 
* 
ponteiro para membro via objeto 
esquerda para a direita 
ponteiro para membro via ponteiro 
* 
multiplicação 
esquerda para a direita 
/ 
divisão 
% 
módulo (resto da divisão inteira) 
+ 
adição 
esquerda para a direita 
- 
subtração 
1036 C++ COMO PROGRAMAR 
« » 
< 
<= 
> 
> 
& 
A 
&& 
II 
*- 1= 
&= 
«= 
»= 
deslocamento sobre bits para a esquerda 
deslocamento sobre bits para a direita 
relacional menor do que 
relacional menor do que ou igual a 
relacional maior do que 
relacional maior do que ou igual a 
relacional igual a 
relacional não igual a 
AND (E) sobre bits 
OR (OU) exclusivo sobre bits 
OR (OU) inclusivo sobre bits 
AND (E) lógico ___________________ 
OR (OU) lógico ___________________ 
condicional ternário 
atribuição 
atribuição com adição 
atribuição com subtração 
atribuição com multiplicação 
atribuição com divisão 
atribuição com módulo 
atribuição com AND sobre bits 
atribuição com OR exclusivo sobre bits 
atribuição com OR inclusivo sobre bits 
atribuição com deslocamento sobre bits para a esquerda atribuição com deslocamento sobre bits para a direita 
vírgula esquerda para a direita 
esquerda para a direita 
esquerda para a direita 
esquerda para a direita 
Operador Tipo Associatividade 1 
esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita direita para a esquerda direita para a esquerda 
Fig. A.1 Tabela de precedência de operadores (parte 2 de 2). 
Apêndice B 
Conjunto de caracteres ASCII 
Conjunto de Caracteres ASCII 
Fig. B.1 O conjunto de caracteres ASCII 
Os dígitos à esquerda da tabela são os dígitos da esquerda do equivalente decimal (0 a 127) do código do caractere e os dígitos do topo da tabela são os dígitos da direita do código do caractere. Por exemplo, o código do caractere “F” é 70 e o código do caractere “&“ é 38. 
O 1 2 3 4 5 6 7 8 9 
O 
2 
3 
4 
5 
6 
7 
8 
9 
1 O 
11 
12 
flui 
soh 
stx 
etx 
eot 
enq 
ack 
bel 
bs 
ht 
ni 
vt 
ff 
cr 
so 
si 
die 
dcl 
dc2 
dc3 
dc4 
nak 
syn 
etb 
can 
em 
sub 
esc 
fs 
gs 
rs 
us 
sp 
‘ 
# 
$ 
% 
& 
‘ 
( 
) 
* 
+ 
, 
- 
. 
/ 
O 
1 
2 
3 
4 
5 
6 
7 
8 
9 
: 
; 
< 
= 
> 
? 
@ 
A 
B 
C 
D 
E 
F 
G 
H 
1 
J 
K 
L 
M 
N 
O 
P 
Q 
R 
S 
T 
U 
V 
W 
X 
Y 
Z 
[ 
\ 
3 
‘ 
‘ 
a 
b 
e 
d 
e 
f 
g 
h 
i 
j 
k 
1 
m 
n 
o 
p 
q 
r 
s 
t 
u 
v 
w 
x 
y 
z 
{ 
} 
dei 
Apêndice C 
Sistemas de numeração 
Objetivos 
• Compreender os conceitos básicos dos sistemas de numeração, tais como base, valor posiciona! e valor do símbolo. 
• Compreender como trabalhar com números representados nos sistemas de numeração binário, octa! e hexadecimal. 
• Ser capaz de abreviar números binários como números octais ou hexadecimais. 
• Ser capaz de converter números octais e hexadecimais em números binários. 
• Ser capaz de fazer conversões de números decimais para seus equivalentes binários, octais e hexadecimais e vice-versa. 
• Compreender a aritmética binária e como números binários negativos são representados usando a notação de complemento de dois. 
Aqui estão os únicos números ratificados. 
Wil!iam Shakespeare 
A natureza tem uma espécie de sistema coordenado aritmético-geométrico, 
pois ela possui todos os tipos de modelos. O que percebemos da natureza está 
em modelos, e todos os modelos da natureza são belos. 
Ocorre-me que o sistema daquela natureza deve ser uma beleza real, pois 
em química descobrimos que as associações são sempre em belos 
números inteiros - não há frações. 
Richard Buckminster Fu!!er 
4 
APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1039 
Visão Geral 
C.1 Introdução 
C.2 Abreviando números binários como números octais e hexadecimais 
C.3 Convertendo números octais e hexadecimais em números binários 
C.4 Convertendo do sistema binário, octal ou hexadecimal para o sistema decimal 
C.5 Convertendo do sistema decimal para o sistema binário, octal ou hexadecimal 
C.6 Números binários negativos: notação em complemento de dois 
Reswno . Terminologia Exetrícios de auto-revisão Respostas aos exercícios de auto-revisão • Ese,vícios 
C.1 Introdução 
Neste apêndice, apresentamos os principais sistemas de numeração que os programadores utilizam, especialmente quando estão trabalhando em projetos de software que exigem muita interação com hardware em “nível de máquina”. Projetos como esses incluem sistemas operacionais, software de redes de computadores, compiladores, sistemas de bancos de dados e aplicações que exigem alto desempenho. 
Quando escrevemos um inteiro como 227 ou -63 em um programa, assume-se que o número está no sistema de numeração decimal (base 10). Os dígitos no sistema de numeração decimal são 0, 1, 2, 3,4, 5, 6, 7, 8 e 9. O menor dígito é O e o maior dígito é 9 um a menos que a base 10. Internamente, os computadores usam o sistema de numeração binário (base 2). O sistema de numeração binário tem apenas dois dígitos, ou seja O e 1. Seu menor digito é O e seu maior digito é 1 - um a menos que a base 2. A Fig. C.l resume os dígitos usados nos sistemas de numeração binário, octal, decimal e hexadecimal. 
Como veremos, os números binários tendem a ser muito maiores do que seus equivalentes decimais. Os programadores que trabalham com linguagens de montagem (assemblers) e com linguagens de alto nível, que permitem que eles desçam ao “nível da máquina”, acham complicado trabalhar com números binários. Assim, dois outros sistemas de numeração - o sistema de numeração octal (base 8) e o sistema de numeração hexadecimal (base 16) - são populares, principalmente porque tornam conveniente a abreviação de números binários. 
No sistema de numeração octal, os dígitos variam de O a 7. Como tanto o sistema de numeração binário quanto 
o sistema octal possuem menos dígitos que o sistema decimal, seus dígitos são os mesmos que seus correspondentes do sistema decimal. 
O sistema hexadecimal apresenta um problema porque ele exige dezesseis dígitos - o menor dígito é O e o maior dígito tem valor equivalente a 15 (um a menos que a base 16). Por convenção, usamos as letras de A a F para representar os dígitos correspondentes aos valores decimais de 10 a 15. Desta forma, em hexadecimal podemos ter números como 876 consistindo apenas de dígitos semelhantes aos decimais, números como 8A55F consistindo em dígitos e letras, e números como FFE consistindo apenas em letras. Ocasionalmente, um número hexadecimal é grafado como uma palavra comum como FACE ou CADA - isso pode parecer estranho aos programadores acostumados a trabalhar com números. A Fig. C.2 resume cada um dos sistemas de numeração. 
Cada um desses sistemas de numeração usa a notação posicional - cada posição na qual é escrito um dígito possui um valor posicional diferente. Por exemplo, no número decimal 937 (o 9,o 3 e o 7 são chamados de valores dos símbolos ou valores dos algarismos), dizemos que o 7 é escrito na posição das unidades, o 3 é escrito na posição das dezenas e o é escrito na posição das centenas. Observe que cada uma dessas posições é uma potência da base (base 10) e que essas potências começam° 
DIgito binário Dígito octal Digito decimal Dígito Hexadecimal 
Fig. C.1 Dígitos dos sistemas de numeração binário, octal, decimal e hexadecimal (parte 1 de 2). 
1040 C++ COMO PROGRAMAR 
Fig. C.1 Dígitos dos sistemas de numeração binário, octal, decimal e hexadecimal (parte 2 de 2). 
Dígito decimal 9 3 7 
Nome da posição Centenas Dezenas Unidades 
Valor posicional 100 10 1 
Valor posicional como 
uma potência da base 102 10’ 10° 
Fig. C.3 Valores posicionais no sistema de numeração decimal. 
Para números decimais maiores, as próximas posições à esquerda seriam a posição dos milhares ti u eievauo a terceira potência), aposição das dezenas de milhar (10 elevado à quarta potência), a posição das centenas de milhar (10 elevado à quinta potência), a posição dos milhões (10 elevado à sexta potência), a posição das dezenas de milhões (10 elevado à sétima potência) e assim por diante. 
No número binário 101, dizemos que o 1 da extremidade da direita está escrito na posição da unidade, o O está escrito na posição do dois e o 1 da extremidade esquerda está escrito na posição do quatro. Veja que cada uma dessas posições é uma potência da base (base 2) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no número (Fig. C.4). 
Para números binários mais longos, as próximas posições à esquerda seriam a posição do oito (2 elevado à 
terceira potência), a posição do dezesseis (2 elevado à quarta potência), a posição do trinta e dois (2 elevado à quinta potência), aposição do sessenta e quatro (2 elevado à sexta potência) e assim por diante. 
No número octal 425, dizemos que o 5 está escrito na posição das unidades, 02 está escrito na posição do oito 
e o 4 está escrito na posição do sessenta e quatro. Veja que cada uma dessas posições é uma potência da base (base 
8) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no 
número (Fig. C.5). 
Dígito binário Dígito octal 
Digito decimal 
Dí 
gito Hexadecimal 
4 
4 
4 
5 
5 
5 
6 
6 
6 
7 
7 8 9 
7 8 9 A B C D E F 
(valor decimal (valor decimal (valor decimal (valor decimal (valor decimal (valor decimal 
10) II) 12) 13) 14) 15) 
Atributo Binário Octal De 
cimal Hexadecimal 
Base 2 8 10 Menor dígito O O O Maior dígito 1 7 9 
16 O F 
Fig. C.2 Comparação entre os sistemas de numeração binário, 
octal, decimal e hexadecimal. 
Valores posicionais no sistema de numeração decimal 
APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1041 
Para números octais mais longos, as próximas posições à esquerda seriam aposição do quinhentos e doze (8 
elevado à terceira potência), a posição do quatro mil e noventa e seis (8 elevado à quarta potência), a posição do trinta e dois mil, setecentos e sessenta e oito (8 elevado à quinta potência) e assim por diante. 
No número hexadecimal 3DA, dizemos que o A está escrito na posição das unidades, o D está escrito na posição do dezesseis e o 3 está na posição do duzentos e cinqüenta e seis. Veja que cada uma dessas posições é uma potência da base (base 16) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no número (Fig. C.6). 
Fig. C.6 Valores posicionais no sistema de numeração hexadecimal. 
Para números hexadecimais mais longos, as próximas posições seriam aposição do quatro mile noventa e seis (16 
elevado à terceira potência), aposição do trinta e dois mil, setecentos e sessenta e oito (16 elevado à quarta potência) 
e assim por diante. 
C.2 Abreviando números binários como números octais e hexadecimais 
O principal uso dos números octais e hexadecimais em computação é abreviar representações binárias longas. A Fig. C.7 destaca o fato de que números binários longos podem ser expressos de uma forma concisa em sistemas de numeração com bases maiores do que a do sistema de numeração binário. 
Valores posicionais no sistema de numeração binário 
1 
Digito binário 1 O Nome da posição Quatro Dois Valor posicional 4 2 Valor posicional como uma potência da base (2) 22 2’ 
1 Unidade 1 2° 
Fig. C.4 Valores posicionais no sistema de numeração binário. 
Valores posicionais no sistema de numeração octal 
1 
Dígito octal 4 2 Nome da posição Sessenta e quatro Oito Valor posicional 64 8 Valor posicional como uma potência da base (8) 82 81 
5 Unidade 1 8° 
Fig. C.5 Valores posicionais no sistema de numeração octal. 
1 Valores posicionais no sistema de numeração hexadecimal 
Dígito hexadecimal 3 D Nome da posição Duzentos e Dezesseis cinqüenta e seis Valor posicional 256 16 Valor posicional como uma potência da base (16) 162 161 
A Unidade 1 16° 
1042 C++ COMO PROGRAMAR 
Fig. C.7 Equivalentes decimais, binários, octais e hexadecimais. 
Um relacionamento particularmente importante com o sistema de numeração binário, que tanto o sistema de numeração octal quanto o hexadecimal possuem, é que suas bases (8 e 16, respectivamente) são potências da base do sistema de numeração binário (base 2). Examine o número binário com 12 dígitos a seguir e seus equivalentes em octal e hexadecimal. Veja se você pode determinar como esse relacionamento torna conveniente exprimir números binários como números octais e hexadecimais. A resposta vem após os números. 
Número binário Equivalente octal Equivalente hexadecimal 
100011010001 4321 8D1 
Para ver como o número binário é convertido facilmente em um número octal, simplesmente divida o número binário de 12 dígitos em grupos de três bits consecutivos cada um e escreva aqueles grupos sobre os dígitos correspondentes do número octal, como se segue 
100 011 010 001 
4 3 2 1 
Observe que o dígito octal escrito sob cada grupo de três bits corresponde exatamente ao equivalente octal daquele número binário de 3 dígitos, de acordo com o que mostra a Fig. C.7. 
O mesmo tipo de relacionamento pode ser observado na conversão de números do sistema binário para o hexadecimal. Em particular, divida o número binário de 12 dígitos em grupos de quatro bits consecutivos cada um e escreva aqueles grupos sobre os dígitos correspondentes do número hexadecimal, como se segue 
1000 1101 0001 
8 0 1 
Observe que o dígito hexadecimal que você escreveu sob cada grupo de quatro bits corresponde exatamente ao equivalente hexadecimal daquele número binário de quatro dígitos, como mostra a Fig. C.7. 
C.3 Convertendo números octais e hexadecimais em números binários 
Na seção anterior, vimos como converter números binários em seus equivalentes octais e hexadecimais, formando grupos de dígitos binários e simplesmente rescrevendo esses grupos como seus valores octais e hexadecimais equivalentes. Esse processo pode ser usado na ordem inversa para produzir o número binário equivalente a um número octal ou hexadecimal dado. 
Número decimal 
Representação binária 
Representação octal 
Representação hexadecimal 
O 
O 
O 
0 
1 
1 
1 
1 
2 
10 
2 
2 
3 
11 
3 
3 
4 
100 
4 
4 
5 
101 
5 
5 
6 
110 
6 
6 
7 
111 
7 
7 
8 
1000 
10 
8 
9 
1001 
11 
9 
10 
1010 
12 
A 
11 
1011 
13 
B 
12 
1100 
14 
C 
13 
1101 
15 
D 
14 
1110 
16 
E 
15 
1111 
17 
F 
16 
10000 
20 
10 
APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1043 
Por exemplo, o número octal 653 é convertido em binário simplesmente escrevendo-se o 6 como seu número 
binário equivalente de 3 dígitos 110, o 5 como seu binário de 3 dígitos equivalente 101 e o 3 como seu binário de 3 dígitos equivalente 011 para formar o número binário de 9 dígitos 110101011. 
O número hexadecimal FAD5 é convertido em binário simplesmente escrevendo-se o F como seu número 
binário equivalente de 4 dígitos 1111,0 A como seu binário de 4 dígitos equivalente 1010, o D como seu binário de 
4 dígitos equivalente 1101 e o 5 como seu binário de 4 dígitosequivalente 0101 para formar o número binário de 16 
dígitos 111110101 1010101. 
C.4 Convertendo do sistema binário, octal ou hexadecimal para o sistema decimal 
Por estarmos acostumados a trabalhar em decimal, freqüentemente é útil converter um número binário, octal ou hexadecimal em decimal, para ter uma noção do que o número “realmente” vale. Nossos diagramas na Seção C. 1 expressam os valores posicionais em decimais. Para converter um número em decimal, a partir de outra base, multiplique o equivalente decimal de cada dígito por seu valor posicional e some esses produtos. Por exemplo, o número binário 110101 é convertido no decimal 53 de acordo com o que mostra a Fig. C.8. 
Fig. C.8 Convertendo um número binário em decimal. 
Para converter o octal 7614 no decimal 3980, aplicamos a mesma técnica, usando dessa vez os valores posicionais octais apropriados, como mostra a Fig. C.9. 
Para converter o hexadecimal AD3B no decimal 44347, aplicamos a mesma técnica, usando dessa vez os 
valores posicionais hexadecimais apropriados, como mostra a Fig. CIO. 
Fig. C.10 Convertendo um número hexadecimal em decimal. 
Convertendo um núm 
ero binário em decimal 
1 
Valores posicionais: 
32 
16 
8 
4 
2 
1 
Valores dos algarismos: 
1 
1 
O 
1 
O 
1 
Produtos: 
1*32=32 
1*1616 
0*8=0 
1*44 
0*2=0 
1*11 
Soma: 
=32+16+0+ 
4+ 
0+153 
Convertendo um número octal em decimal 
1 
‘valores posicionais: 512 64 
8 
1 
Valores dos algarismos: 7 6 
1 
4 
Produtos: 7*5123584 6*64=384 
1*8=8 
4*14 
Soma: = 3584 + 384 + 8 + 4 = 
3980 
Fig. C.9 Convertendo um número octal em decimal. 
Convertendo um número hexadecimal em decimal 
Valores posicionais: 4096 256 
16 
1 
Valores dos algarismos: A D Produtos: A*4096=40960 D*256=3328 
3 3*16=48 
B B*1=11 
Soma: = 40960 + 3328 + 48 + 11 
= 44347 
1044 C++ COMO PROGRAMAR 
C.5 Convertendo do sistema decimal para o sistema binário, octal ou hexadecimal 
As conversões das seções anteriores são conseqüências naturais das convenções da notação posicional. Converter do ______ sistema decimal para o sistema binário, octal ou hexadecimal também segue essas convenções. 
Suponhaque desejamos converter o número decimal 57 para o sistema binário. Começamos escrevendo os valores posicionais das colunas, da direita para a esquerda, até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos daquela coluna, portanto a descartamos. Assim, escrevemos inicialmente: 
Valores posicionais: 64 32 16 8 4 2 1 
A seguir, descartamos a coluna com valor 64, restando: 
Valores posicionais: 32 16 8 4 2 1 
A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 57 por 32 e observamos que há uma vez 32 em 57, com resto 25, portanto escrevemos 1 na coluna 32. Dividimos 25 por 16 e observamos que há uma vez 16 em 25, com resto 9 e escrevemos 1 na coluna 16. Dividimos 9 por 8 e observamos que há uma vez 8 em 9, com resto 1. As duas próximas colunas produzem quocientes com resto zero quando divididas por seus valores posicionais, portanto escrevemos Os nas colunas 4 e 2. Finalmente, dividindo 1 por 1 obtemos 1, portanto escrevemos 1 na coluna 1. Isso leva a: 
Valores posicionais: 32 16 8 4 2 1 
Valores dos algarismos: 1 1 1 O O 1 
e assim o valor decimal 57 é equivalente ao binário 111001. 
Para converter o número decimal 103 para o sistema octal, começamos escrevendo os valores das colunas até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos dessa coluna, portanto a descartamos. Assim, escrevemos inicialmente: 
Valores posicionais: 512 64 8 1 
A seguir, descartamos a coluna com valor 512, restando: 
Valores posicionais: 64 8 1 
A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 103 por 64 
e observamos que há uma vez 64 em 103, com resto 39, portanto escrevemos 1 na coluna 64. Dividimos 39 por 
8 e observamos que há quatro vezes 8 em 39, com resto 7 e escrevemos 4 na coluna 8. Finalmente, dividimos 
7 por 1 e observamos que há sete vezes 1 em 7, não ficando resto algum, portanto escrevemos 7 na coluna 1. 
Isso leva a: 
Valores posicionais: 64 8 1 
Valores dos algarismos: 1 4 7 
e assim o valor decimal 103 é equivalente ao octal 147. 
Para converter o número decimal 375 para o sistema hexadecimal, começamos escrevendo os valores das colunas até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos dessa coluna, portanto a descartamos. Assim, escrevemos inicialmente: 
Valores posicionais: 4096 256 16 1 
APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1045 
A seguir, descartamos a coluna com valor 4096, restando: 
Valores posicionais: 256 16 1 
A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 375 por 256 e 
observamos que há uma vez 256 em 375, com resto 119, portanto escrevemos 1 na coluna 256. Dividimos 119 por 
16 e observamos que há sete vezes 16cm 119, com resto 7 e escrevemos 7 na coluna 16. Finalmente, dividimos 7 por 
1 e observamos que há sete vezes 1 em 7, não ficando resto algum, portanto escrevemos 7 na coluna 1. Isso leva a: 
Valores posicionais: 256 16 1 
Valores dos algarismos: 1 7 7 
e assim o valor decimal 375 é equivalente ao hexadecimal 177. 
C.6 Números binários negativos: notação em complemento de dois 
A análise deste apêndice concentrou-se nos números positivos. Nesta seção, explicamos como os computadores representam números negativos usando a notação em complemento de dois. Em primeiro lugar, explicamos como é formado o complemento de dois de um número binário e depois mostramos por que ele representa o valor negativo de um determinado número binário. 
Considere um equipamento com inteiros de 32 bits. Suponha 
int valor = 13; 
A representação em 32 bits do valor é 
00000000 00000000 00000000 00001101 
Para formar o negativo de valor, formamos inicialmente o complemento de um, aplicando o operador de complemento sobre bits de C++ (-), que também é chamado de operador NOT sobre bits: 
complementoDeUmDeValor = ‘valor; 
Internamente, valor é agora valor com cada um de seus bits invertidos - os uns se tornam zeros e os zeros se tornam uns, como segue: 
valor: 
00000000 00000000 00000000 00001101 
‘valor (i.e., complemento de um de valor): 
11111111 11111111 11111111 11110010 
Para formar o complemento de dois de valor, simplesmente adicionamos um ao complemento de um de valor. Assim, 
O complemento de dois de valor é: 
11111111 11111111 11111111 11110011 
Agora, se isso é realmente igual a -13, devemos ser capazes de adicionar o binário 13 a ele e obter o resultado 0. Vamos tentar fazer isso: 
00000000 00000000 00000000 00001101 
+ 11111111 11111111 11111111 11110011 
00000000 00000000 00000000 00000000 
O bit transportado (vai um) da coluna da extremidade esquerda é descartado e realmente obtemos zero como resultado. Se adicionássemos o complemento de um de um número ao próprio número, o resultado seria todo Is. O 
1046 C++ COMO PROGRAMAR 
segredo de obter um resultado todo em zeros é que o complemento de dois vale 1 a mais do que o complemento de um. A adição de 1 faz com que cada coluna resulte em zero, transportando o valor 1 para a próxima coluna. O valor é transportado para a esquerda, de uma coluna para outra, até que seja descartado do bit da extremidade esquerda e assim o número resultante fica todo consistindo em zeros. 
Na verdade, os computadores realizam uma subtração como 
x = a - valor; 
adicionando o complemento de dois de valor a a como se segue: 
x = a + (-‘valor + 1); 
Suponha que a é 27 e valor é 13, como antes. Se o complemento de dois de valor é realmente o negativo de valor, adicionar a a deve produzir o resultado 14. Vamos tentar fazer isso: 
a(i.e., 27) 00000000 00000000 00000000 00011011 
+(-valor + 1) + 11111111 11111111 11111111 11110011 
00000000 00000000 00000000 00001110 
que é realmente igual a 14. 
Resumo 
Quando escrevemos um inteiro como 19 ou 227 ou -63 em um programa, o número é consideradoautomaticamente como 
estando no sistema de numeração decimal (base 10). Os dígitos no sistema de numeração decimal são 0, 1, 2, 3, 4, 5, 6, 7, 8 
e 9. O menor dígito é O e o maior dígito é 9-um a menos que a base 10. 
• Internamente, os computadores usam o sistema de numeração binário (base 2). O sistema de numeração binário tem apenas dois dígitos, que são O e 1. Seu menor dígito é O e seu maior dígito é 1 - um a menos que a base 2. 
• O sistema de numeração octal (base 8) e o sistema de numeração hexadecimal (base 16) se tornaram populares principalmente porque são convenientes para exprimir números binários de uma forma abreviada. 
• Os dígitos do sistema de numeração octal variam de 0 a 7. 
• O sistema de numeração hexadecimal apresenta um problema porque exige dezesseis dígitos - o menor dígito com valor 0 e o maior dígito com um valor equivalente a 15 em decimal (um a menos que a base 16). Por convenção, usamos as letras A a F para representar os dígitos hexadecimais correspondentes aos valores decimais 10 a 15. 
• Cada sistema de numeração usa notação posicional - cada posição na qual um dígito é escrito tem um valor posicional diferente. 
• Um relacionamento importante que tanto o sistema de numeração octal quanto o sistema de numeração hexadecimal possuem com o sistema binário é que as bases dos sistemas octal e hexadecimal (8 e 16, respectivamente) são potências da base do sistema de numeração binário (base 2). 
• Para converter um número octal em um número binário, simplesmente substitua cada dígito octal pelo binário equivalente de três dígitos. 
• Para converter um número hexadecimal em um número binário, simplesmente substitua cada dígito hexadecimal pelo binário equivalente de quatro dígitos. 
• Por estarmos acostumados a trabalhar com números decimais, freqüentemente é útil converter um número binário, octal ou hexadecimal em decimal para ter uma melhor noção do que o número “realmente” vale. 
• Para converter um número de outra base para um número decimal, multiplique o equivalente decimal de cada dígito por seu valor posicional e some esses produtos. 
Os computadores representam números negativos usando a notação em complemento de dois. 
APËNDICE C - SISTEMAS DE NUMERAÇÃO 1047 
Para formar o negativo de um valor, forme inicialmente seu complemento de um aplicando o operador de complemento sobre bits de C++ (). Isso inverte os bits do valor. Para formar o complemento de dois de um valor, simplesmente adicione um ao complemento de um do valor. 
Terminologia 
base sistema de numeração hexadecimal 
conversões sistema de numeração na base 10 
dígito sistema de numeração na base 16 
notação em complemento de dois sistema de numeração na base 2 
notação em complemento de um sistema de numeração na base 8 
notação posicional sistema de numeração octal 
operador de complemento sobre bits valor do símbolo 
sistema de numeração binário valor negativo 
sistema de numeração decimal valor posicional 
Exercícios de auto-revisão 
C.1 As bases dos sistemas de numeração decimal, binário, octal e hexadecimal são ____________ ,__________ ,___________ e 
C.2 Em geral. as representações decimal, octal e hexadecimal de um determinado número binário contêm (mais/menos) dígitos do que o número binário. 
C.3 (Verdadeiro/Falso) Um motivo popular para o uso do sistema de numeração decimal é que ele forma uma notação conveniente para exprimir números binários de uma forma abreviada, simplesmente substituindo-se um dígito decimal por um grupo de quatro dígitos binários. 
C.4 A representação (octal/hexadecimalldecimal) de um valor binário muito grande é a mais concisa (das alternativas fornecidas). C.5 (Verdadeiro/Falso) O maior dígito em qualquer base vale um a mais que a base. 
C.6 (Verdadeiro/Falso) O menor dígito em qualquer base vale um a menos que a base. 
C.7 O valor posicional do dígito da extremidade direita de qualquer número nos sistemas binário, octal, decimal e hexadecimal é sempre 
C. O valor posicional do dígito à esquerda do dígito da extremidade direita nos sistemas binário, octal, decimal ou hexadecimal é sempre 
C.9 Preencha as lacunas na tabela a seguir com os valores posicionais das quatro posições da direita em cada um dos sistemas de numeração indicados. 
decimal 1000 100 10 1 
hexadecimal 256 
binário 
octal 512 8 
C.1O Converta o binário 110101011000 para os sistemas octal e hexadecimal. 
C.I 1 Converta o hexadecimal FACE para o sistema binário. 
C.12 Converta o octal 7316 para o sistema binário. 
C.13 Converta o hexadecimal 4FEC para o sistema octal. (Sugestão: em primeiro lugar, converta 4FEC para o sistema binário 
e depois converta aquele número binário para o sistema octal). 
C.14 Converta o binário 1101110 para o sistema decimal. 
C.15 Converta o octal 317 para o sistema decimal. 
C.16 Converta o hexadecimal EFD4 para o sistema decimal. 
C.17 Converta o decimal 177 para os sistemas binário, octal e hexadecimal. 
1048 C++ COMO PROGRAMAR 
C.18 Mostre a representação binária do decimal 417. Depois mostre os complementos de um e de dois de 417. 
C.19 Qual o resultado quando o complemento de um de um número é adicionado ao próprio número? 
Respostas aos exercícios de auto-revisão 
C.1 10. 2, 8, 16. 
C.2 Menos. 
C.3 Falso. 
C.4 1-lexadecimal. 
C.5 Falso o maior dígito em qualquer base vale um a menos que a base. 
C.6 Falso - o menor dígito em qualquer base é zero. 
C.7 1 (a base elevada à potência zero). 
C.8 A base do sistema de numeração. 
C.9 Preencha as lacunas na tabela a seguir com os valores posicionais das quatro posições da direita em cada um dos sistemas 
de numeração indicados. 
decimal 1000 100 10 
hexadecimal 4096 256 16 
binário 8 4 2 
octal 512 64 8 
C.1O Octal 6530; Hexadecimal D58. 
C.11 Binário 1111 1010 1100 1110. 
C.12 Binário 111 011 001 110. 
C.13 Binário0l00 111 111 101 100: 0cta147754. 
C.14 Decimal 2+4+8+32+64=110. 
C.15 Decimal 7+1*8+3*64=7+8+192=207. 
C.16 Decimal 4+13*16+15*256+14*4096=61396. 
C.l7 Decimal 177 
para binário: 
256 128 64 32 16 8 4 2 
128 64 32 16 8 4 2 
(1*128)+(0*64) +(1*32) + (1*16)+ (0*8) + (0*4)+(0*2)+(1*1) 
10110001 
para octal: 
512 64 8 1 
64 8 1 
(2*64)+ (6*8) +(1*1) 
261 
para hexadecimal: 
256 16 1 
16 1 
(11*16)+(1*1) 
(B*16) + (1*1) 
B1 
C.18 Binário: 
5122561286432168421 
256 128 64 32 16 8 4 2 1 
(1*256) + (1*128) + (0*64) + (1*32) + (0*16) + (0*8) + (0*4) + (0*2) + (1*1) 
110100001 
APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1049 
Complemento de um: 001011110 
Complemento de dois: 001011111 
Verificação: o número binário original + seu complemento de dois 
110100001 
001011111 
000000000 
C.19 Zero. 
Exercícios 
C.20 Algumas pessoas argumentam que muitos de nossos cálculos seriam mais fáceis no sistema de numeração de base 12 porque 12 é divisível por muito mais números do que 10 (para base 10). Qual o menor dígito na base 12? Qual pode ser o maior símbolo para o dígito da base 12? Quais os valores posicionais das quatro posições da direita de qualquer número no sistema de numeração da base 12? 
C.21 Como o maior valor de símbolo nos sistemas de numcração analisados se relaciona com o valor posicional do primeiro dígito à esquerda do dígito mais à direita de qualquer número nesses sistemas de numeração? 
C.22 Complete a tabela de valores posicionais a seguir para as quatro posições da direita em cada um dos sistemas de numeração indicados: 
decimal 1000 100 10 1 
basefl . . . . 6 
base 13 . . . 169 . . 
base3 27 . . 
C.23 Converta o binário 100101111010 em octal e em hexadecimal. 
C.24 Converta o hexadecimal 3A7D em binário. 
C.25 Converta o hexadecimal 765F em octal. (Sugestão: converta inicialmente 765F em binário e depois converta aquele 
número binário em octal.) 
C.26 Converta o binário 1011110 em decimal. 
C.27 Converta o octal 426 em decimal. 
C.28 Converta o hexadecimal FFFF em decimal. 
C.29 Converta o decimal 299 em binário, em octal e em hexadecimal. 
C.30 Mostre a representação binária do decimal 779. Depois mostre os complementos de um e de dois de 779. 
C.31 Qual o resultado da soma do complemento de dois de um númerocom o próprio número? 
C.32 Mostre o complemento de dois do valor inteiro -1 em um equipamento com inteiros de 32 bits. 
Apêndice D 
Recursos sobre C++ na Internet e na Web 
Este apêndice contém uma lista de recursos valiosos para C++ na Internet e na World Wide Web. Incluem FAQs (respostas a perguntas feitas freqüentemente), tutoriais, como obter o ANSI/ISO C++ padrão, informações sobre compiladores C++ populares e como obter compiladores gratuitamente, demos, livros, tutoriais, ferramentas de software, artigos, entrevistas, conferências, jornais e revistas, cursos on-line, grupos de notícias e recursos para carreira profissional. 
Para obter mais informações sobre o American National Standards Institute (ANSI) ou para adquirir documentos padrão, visite o ANSI em http: //www. ansi . org/. 
Di Recursos 
http://www.progsource.com/index. htinl 
The Programmer’s Source é uma grande fonte de informações sobre muitas linguagens de programação, inclusive C++. Você encontrará listas de ferramentas, compiladores, software, livros e outros recursos para 
c++. 
http: //www. intranet. ca/-sshah/booklist. html#C++ 
The Programmer’s Book List tem uma seção de livros sobre C++ com mais de 30 títulos. 
http: //www. genitor, comi resources . htm 
O site Developer Resources tem links para compiladores C++, ferramentas úteis de C++, código- fonte do CY C++ Users Journal e publicações. 
http: //www.possibility. com/Cpp/CppCodingStandard.html 
O site The C+ + Coding Standard tem uma grande quantidade de informações sobre a linguagem de programação C++ bem como uma grande lista de recursos sobre C++ na Web. 
http: //help-site. com/cpp . htm). 
Help-site.com fornece links para recursos sobre C++ naWeb. 
http: //www. glenmccl . com/tutor. htm 
Este site é uma boa referência para usuários com conhecimento de CIC++. Os tópicos são acompanhados por 
explicações detalhadas e exemplos de código. 
http: //www . prograinmersheaven. com/zone3/cat353/index . htm 
Este site oferece uma vasta coleção de bibliotecas para C++. Estas bibliotecas estão disponíveis para download 
gratuito. 
http: //www . prograinmersheaven. com/zone3/catl55/index . htm 
Este site oferece ferramentas e bibliotecas para CIC++. 
http: //w. programmersheaven. com/wwwboard/board3/wwwboard. asp 
Este quadro de mensagens permite aos usuários divulgar perguntas sobre programação em C++. Estas bibliotecas estão disponíveis para download gratuito. 
APÊNDICE D - RECURSOS SOBRE C++ NA INTERNET E NA WEB 1051 
http: //www hal9k. com/ cug/ 
Este site oferece recursos, jornais, shareware,freeware, etc. 
http: //developer earthweb. com/directories/pages/dir. c . developmenttools htm Um site popular na Web para programadores, Developer.com oferece uma ampla lista de recursos para programadores usando C e C++. 
http: //www.devx.com 
DevX é um site abrangente com recursos para programadores. A seção oferece as últimas novidades, ferramentas e técnicas para diversas linguagens de programação. A seção C++ zone do site é dedicada a C++. 
D.2 Tutoriais 
http: //info desy . de/gna/html/cc/index html 
Este tutorial Introduction lo Object-Orientred Programming Using C++ está disponível para download ou você pode se registrar em um curso baseado na Web. Verifique os livros recomendados sobre programação orientada a objetos e a linguagem de programação C++. 
http: //uu-gna.mit. edu: 8001/uu-gna/text/cc/Tutorial/tutorial . html 
Este tutorial Introduction to Object-Oriented Programming Using C++ é dividido em 10 capítulos, cada um 
com um conjunto de exercícios e soluções para os exercícios. 
http: //www. icce. rug . nl/docs/cplusplus/cplusplus . html 
Este tutorial, escrito por um professor universitário, foi projetado para programadores de C que querem apreender C++. 
http: //www.rdw. tec.mn.us/ 
O Red Wing/Winona Technical Coliege oferece cursos de C++ on-line valendo créditos. 
http: //www. zdu. com/zdu/catalog/progranuning . htm 
A ZD Net University oferece vários cursos on-line relacionados com a linguagem de programação C++. 
http: //library. advanced. org/3074/ 
Este tutorial foi projetado para programadores de Pascal que querem aprender C++. 
ftp: //rtfm.mit. edu/pub/usenet/news . answers/C-faq/learn-c-cpp-today 
Este site tem uma lista de tutoriais sobre C++. Também contém informações sobre vários compiladores C++. 
http: //www. icce . rug . nh/docs/cplusplus/cplusplus . htm 
Um site para usuários que já conhecem C e querem aprender C++. 
http: //www. cprogranuning. com/tutorial/html 
Este site inclui um tutorial passo a passo que inclui exemplos de código. 
http://www.progranunersheaven.com/zone3/cat34/index. htm 
Este site contém uma lista de assuntos de tutoriais. Os níveis dos tutoriais variam desde principiantes até 
especialistas. 
D.3 FAQs 
http: //reality. sgi . com/austern/std-c++/faq . html 
Este é um site de FAQs dedicado a perguntas sobre C++ padrão ANSI/ISO, o projeto da linguagem de programação C++ e às últimas mudanças na linguagem. 
http: //www. trtnphrst. demon . co . uk/cpplibsl . html 
Este é um FAQ sobre as bibliotecas de C++. Você encontrará uma extensa lista de respostas às perguntas feitas 
freqtientemente sobre as bibliotecas padrão de C++. 
1052 C++ COMO PROGRAMAR 
http: //pneuma phys ualberta. ca/-.burris/cpp htm 
O The Internet Link Exchange é um Outro grande recurso para informações sobre C++. Este site tem links para FAQs relacionados a comp. lang. c++ e as bibliotecas padrão de C++. 
http: //www.math.uio.no/nett/faq/C-faq/faq.html 
A lista comp. lang. e de perguntas feitas freqüentemente (FAQs) e respostas. 
http: //lglwww. epfl ch/’wo1f/c std. htm]. 
A lista de FAQs sobre o padrão ANSI/ISO para a linguagem de programação C. 
http: //www. cerfnet. com/-mpcline/C++-FAQs-Lite/ 
Este site tem muitas FAQs divididas em 35 categorias. 
http: //www. faqs org/faqs/by-newsgroup/comp/comp. lang. html 
Este site consiste em uma série de links para FAQs e tutoriais reunidos do grupo de notícias Comp Lang C++. 
http: //www. cerfnet. com/-mpc1ine/C++-FAQs-Lite/ 
Este é um site de FAQ com uma ampla gama de tópicos. Cada tópico inclui diversas perguntas com respostas. 
http: //www. eskimo. coin/-scs/C-faq/top html 
Esta lista de FAQ contém tópicos tais como ponteiros, alocação de memória e strings. 
DA Visual C-i-+ 
http://ehesworth.com/pv/languages/c/visualcpptutorial. htin 
Este é um bom tutorial para principiantes que estejam aprendendo o Microsoft Visual C++. O tutorial dá ao 
usuário uma visão geral sucinta de C+÷. 
D.5 comp.lang.c++ 
http: //weblab. research att. com/phoaks/comp/lang/c++/ resourcesO html UAU! Este site é um tremendo recurso de informações relacionadas com comp. lang. c++. O título da página, People Helping OneAnotherKnow Stuff, resume tudo que é este site. Você encontrará links para mais de 40 recursos adicionais de informações sobre C++. 
http: //www. r2m. com/windev/cpp-compiler html 
Este contém links para muitos sites relacionados com C++. 
http: //home istar. ca/-.stepanv/ 
Este site tem muitos links para sites com artigos e informações relacionados com a programação C++. Tópicos listados neste site incluem gráficos orientados a objetos, o padrão ANSI C++, a biblioteca padrão de gabaritos (STL), recursos sobre MFC e tutoriais. 
http: //kom. net/-’dbrick/newspage/cornp. lang. c++ html 
Visite este site para se conectar a grupos de notícias relacionados à hierarquia eomp lang c++. 
http: //www. austinlinks com/CPlusPlus/ 
O site da Quadralay Corporation tem links para recursos sobre C++, incluindo Visual C++/bibliotecas MFC, 
informações sobre programação em C++, recursos para carreiras profissional em C÷+ e uma lista de tutoriais 
e outras ferramentas on-line para ajudá-lo a aprender C++. 
http: /1db. csie ncu. edu. tw/-kant c/C/chapter2 21 . html 
Este site da Web tem a lista das funções da biblioteca padrão ANSI C. 
http: //wwwcnl . cem. ch/asd/geant/geant4yublic/codingstandards/ 
coding/coding2 . html 
Um recurso excelente e extenso sobre informações acerca do padrão C++ 
APÊNDICE D - RECURSOS SOBRE C++ NA INTERNET E NA WEB 1053http: //ibd. ar. com/ger/comp. lang. . html 
O Green Eggs Report lista mais de 100 URLs dentro de comp. lang . C++. 
http: //www. ts umu . se/-maxell/C++/ 
Este site fornece exemplos de código para algumas das classes C++. 
http: //www. quadralay. com/CPlusPlus/ 
Este é um grande recurso para informações sobre programação C++ , aprendizado de C++, carreiras em C++ e outras informações relacionadas com C++. 
http: //www. research. att. comi bs/homepage . htznl 
Esta é a homepage de Bjarne Stroutrup, criador da linguagem de programação C++. Ele fornece uma lista de recursos C++, FAQs e outras informações úteis sobre C++. 
http: //www. cygnus . coxn/misc/wp/draft/index . htxnl 
Este site tem a “minuta de trabalho” do padrão ANSI C++ em formato HTML (dezembro de 1996). 
http: //www . austinlinks . com/cPlusPlus/ 
Este site tem uma lista de recursos C++ incluindo livros sugeridos, recursos para carreira profissional, informações sobre a linguagem de programação C++ e links para sites com listas de recursos C++. 
ftp: //research. att. com/dist/c++std/WP/CD2/ 
Este site tem a minuta atual do padrão ANSI/ISO para C++. 
http: //ai kaist. ac . kr/ -ymkim/Program/c++ . html 
Este site oferece tutoriais, bibliotecas, compiladores populares, FAQs e grupos de notícias. 
http: //www. cyberdiem. com/vin/learn . html 
Learn C/C++ Today é o título deste site, que oferece diversos tutoriais avançados sobre CIC++. 
http: //www. trumphurst. com/cpplibsl . html 
A The C++ Libraries FAQ é compilada por programadores profissionais para o uso e benefício de outros programadores de C++. A biblioteca é atualizada regularmente e é uma boa fonte de informações atualizadas. 
http: //www. experts-exchange . com/comp/lang/cplusplus/ 
The Experts Exchange é um recurso gratuito para profissionais hi gh-tech que desejem compartilhar informações com seus colegas. Sócios podem afixar perguntas e respostas. 
http: //www. execpc. com/ -ht/vc . htm 
Este site é uma compilação de links sobre programação em C++ que incluem sites de informações genéricas, tutoriais, revistas e bibliotecas. 
http: //cplus . about. com/compute/cplus/ 
Este é o site About.com para as linguagens de programação CIC++. Você encontrará tutoriais, freeware/ shareware, dicionários, empregos, revistas e muitos outros itens relacionados. 
http: //pent2l infosys . tuwien . ac. at/cetus/ 
oocplusplus . htinl#oocylusylusgeneralnewsgroups 
Neste site você encontrará uma explicação geral sobre C++. Este site contém grupos de notícias. 
news : comp. lang. c++ 
Este é um grupo de notícias dedicado a questões sobre a linguagem orientada a objetos C++. 
http: //cuiwww. unige . ch/OSG/Vitek/Compilers/YearB6/msg00046 . html “O padrão C em máquinas segmentadas”. 
http: //www. csci . csusb . edu/dick/c++std/ 
Este site tem links para a minuta do padrão C++ ANSI/ISO e o grupo Usenet comp. std. c++ que fornece novas informações sobre o padrão. 
1054 C++ COMO PROGRAMAR 
news : comp. lang. c++ . moderated 
Este é um grupo de notícias mais voltado a aspectos técnicos dedicado à linguagem C++. 
http: / /www . progsource . com/index. htxnl 
The Programmer’s Source é um grande recurso de informações sobre muitas linguagens de programação inclusive C++. Você encontrará listas de ferramentas, compiladores, software, 1ivros e outros recursos para C++. A lista de compiladores está organizada por plataforma. 
http: //www. cygnus . com/misc/gnu-win32/ 
O ambiente de desenvolvimento GNU está disponível isento de custo no site Cygnus na Web. 
http: //www. remcomp. com/lcc-win32/ 
Você pode fazer download do compilador LCC-Win32 para Windows 95/NT, sem custo, deste site da Web. 
http: //www . microsoft. com/visualc/ 
A homepage do Microsoft Visual C++ fornece informações sobre produtos, overviews, materiais suplementares e informações sobre como encomendar o compilador Visual C++. 
http://www.com/products/languages/watccpl. html 
Notícias e informações sobre o produto para o Watcom C/C++ versão 11.0 da Powersoft. Não pode ser feito download do compilador a partir deste site da Web. São fornecidas informações para aquisição. 
http://netserv.bor1and.com/bor1andcpp/cppcomp/turbocpp.htm1 
O site na Web para o compilador Borland Turbo C++ Visual Edition para Windows. 
http: //www. symantec. com/scpp/fs scpp72 95. html 
Symantec C++ 7.5 para Windows 95 e Windows NT. 
http: //www .metrowerks . com/products/ 
Metrowerks CodeWarrior para Macintosh ou Windows. 
http: //www. faqs . org/faqs/by-newsgroup/comp/comp. compilers . html 
Este é um site que criou uma lista de FAQs gerados dentro do grupo de notícias comp. compilers. 
http: //www.ncf. carleton. ca/%7Ebg283/ 
Este é um compilador C++ para DOS chamado de Miracle C compiler. O compilador é grátis para download, mas o código-fonte não fica disponível enquanto você não pagar a taxa de registro. 
http: //www . borland. com/bcppbuilder/ 
Este é um link para o Borland C++ Builder5.5. Uma versão de linha de comando grátis está disponível para download. 
http: //www. compilers . net/ 
Compilers.net é um site projetado para ajudá-lo a encontrar compiladores. 
http: //sunset . backbone . olemiss . edu/%7Ebobcook/eC/ 
Este compilador C++ é projetado para usuários principiantes em C++ que queiram passar de Pascal para C++. 
http: //developer . intel . com/vtune/conipilers/cpp/ 
O copilador Intel C++. Plataformas suportadas são Windows 98, NT e 2000. 
http: //www. kai . com/Çplusplus/index . htxnJ. 
O compilador Kai C++ está disponível gratuitamente para um período de demonstração de 30 dias. 
0.6 Compiladores 
APÊNDICE D - RECURSOS SOBRE NA INTERNET E NA WEB 1055 
0.7 Ferramentas de desenvolvimento 
http: //www. quintessoft. comi 
A Quintessoft Engineering, mc. oferece o Code Navigator para C++, uma ferramenta de desenvolvimento em C++ para Windows 951NT. Você encontrará informações sobre o produto, comentários dos usuários, downloads gratuitos de edições de demonstração e informações de preços para o produto. 
D.8 Biblioteca padrão de gabaritos 
Tutoriais 
http: //www. cs brown . edu/people/jak/prograinming/stl-tutorial/ 
tutorial html 
Este tutorial sobre a STL está organizado em exemplos, filosofia, componentes e estendendo a STL. Você 
encontrará exemplos de código usando os componentes da STL, explicações e diagramas úteis. 
http: //web. ftech. net/honeyg/artic1es/eff stl htm 
Este tutorial sobre a STL oferece informações sobre os componentes da STL, contêineres, adaptadores de 
stream e iteradores, transformação e seleção de valores, filtragem e transformação de valores, e objetos. 
http: //www . xraylith wisc edu/-khan/software/stl/osexaniples/ 
examples htinl 
Este é um site útil para pessoas que estejam ainda aprendendo sobre a STL. Você encontrará uma introdução 
à STL e exemplos do ObjectSpace STL Tool Kit. 
Referências 
http: //www. sgi . com/Technology/STL/other resources . html 
Este site tem uma lista de muitos sites da Web relacionados com a STL e uma lista de livros sobre a STL 
recomendados. 
http: //www. cs . rpi edu/proects/STL/st1/st1 . html 
Esta é a homepage do Standard Template Library Online Reference do Rensselaer Polytechnic Tnstitute. Você encontrará explicações detalhadas sobre a STL, bem como links para outros recursos úteis para informações sobre a STL. 
http: //www. sgi com/Technology/STL/ 
O Silicon Graphics Standard Template Library Programmer’s Guide é um recurso útil para informações sobre a STL. Você pode fazer download da STL deste site e encontrar as informações mais recentes, documentação de projeto e links para outros recursos para a STL. 
http: //www. dinkumware comirefcpp . html 
Este site contém informação útil sobre a biblioteca C++ do padrão ANSI/ISO e contém extensa informação 
sobre a biblioteca padrão de gabaritos (STL). 
http: //www. roguewave com/products/xplatfortn/stdlib/ 
A página da Web da Rogue Wave Software’s Standard C++ Library. Você pode fazer download de artigos 
relacionados com a versão deles da biblioteca padrão de C++. 
FAQs 
ftp: //butler .hpl .hp. com/stl/stl. faq 
Este site de FTP é uma folhade FAQ para a STL mantida por Marian Corcoran, membro do comitê ANSI e 
uma especialista em C++. 
1056 C++ COMO PROGRAMAR 
Artigos, livros e entrevistas 
http: //www. sgi com/Technology/STL/other resources html 
Este site relaciona muitos sites da Web relacionados com a STL e uma pequena lista de livros sobre a STL 
recomendados, 
http://www.byte.com/art/951O/sec12/art3. htzn 
O site da Bvte Magazine tem uma cópia de um artigo sobre a STL escrito por Alexander Stepanov. Stepanov, um dos criadores da biblioteca padrão de gabaritos. oferece informações sobre o uso da STL em programação genérica. 
http: //www. sgi com/Technology/STL/drdobbs-interview.html 
Uma entrevista com Alexander Stepanov que tem algumas informações interessantes sobre a criação da biblioteca padrão de gabaritos. Stepanov fala sobre como a STL foi conceituada, programação genérica, o acrônimo “STL” e mais. 
Padrão ANSI/ISO C++ 
http://www.ansi.org/ 
Você pode comprar uma cópia do documento padrão de C÷+ neste site. 
Software 
http: //www. cs rpi . edu/musser/stJ. html 
O site RPI STL inclui informação sobre como a STL difere de outras bibliotecas de C++ e como compilar programas que usam a STL, lista dos principais arquivos de #include da STL, exemplos de programas que usam a STL, classes contêíneres da STL e categorias de iteradores da STL. Ele também oferece uma lista de compiladores compatíveis com a STL, sites de FTP para código-fonte STL e materiais relacionados. 
http://www.inathcs.sisu.edu/facu1ty/horstman/safest1.htm1 
Faça download do SAFESTL.ZIP. uma ferramenta projetada para encontrar erros em programas que usam a 
STL. 
http://www.objectspace.com/jgh 
Object Space oferece informação sobre o porte de C++ para Java. Você pode fazer download gratuito da classe portável Standards<ToolKit> deles. Os principais destaques do toolkit são contêineres, iteradores, algoritmos, alocadores, strings e exceções. 
http: //www. cs rpi edu/-wiseb/stl-borland htnil 
“Using the Standard Template Library with Borland C++ Este site é uma referência útil para pessoas que 
usam o compilador Borland C++. O autor tem seções sobre advertências e incompatibilidades. 
http: //msdn nicrosoft. com/visualc/ 
Esta é a homepage do Microsofi Visual C+ +. Aqui você pode encontrar as notícias mais recentes sobre o 
Visual C++, atualizações, recursos técnicos, exemplos e downloads. 
http: //www . borland. com/bcppbuilder/ 
Esta é a homepage do Borland C++ Builder. Aqui você pode encontrar uma variedade de recursos para C++, incluindo diversos grupos de notícias sobre C++, informações sobre as mais recentes melhorias do produto, FAQs e muitos outros recursos para programadores que usam o C++ Builder. 
Bibliografia 
(A192) Allison, C., “Text Processing 1,” The C Users Journal, Vol. 10, No. 10, October 1992, pp. 23-28. 
(A192a) Allison, C., “Text Processing II,” The C Users Journal, Vol. 10, No. 12, December 1992, pp. 73-77. 
(A193) Allison, C., “Code Capsules: A C++ Date Class, Part 1,” The C Users Journal, Vol. 11, No. 2, February 1993, pp. 123-131. 
(A194) Allison, C., “Conversions and Casts,” The C/C++ (Jsers Journal, Vol. 12, No. 9, September 1994, pp. 
67-85. 
(Am95) Almarode, J., “Object Security,” Smalltalk Report, Vol. 5, No. 3 November/December 1995, pp. 15-17. (A n90) ANSI, American National Standardforlnformation Systems-Programming Language C (ANSI Document 
lar ANSI/ISO 9899: 1990), New York, NY: American National Standards Institute, 1990. 
iue (An94) American National Standard, Programming Language C++. (A aprovação e o trabalho técnico de de- 
de senvolvimento estão sendo conduzidos pelo Accredited Standards Committee X3, Information Technology 
e seu Technical Committee X3J16, Programming Language C++, respectivamente. Para maiores deta lhes entre em contato com X3 Secretariat, 1250 Eye Street, NW, Washington, DC 20005, EUA.) 
(An92) Anderson, A. E., and W. J. Heinze, C++ Programming and Fundamental Concepts, Englewood Cliffs, 
na NJ: Prentice Hali, 1992. 
(Ba92) Baker, L., C Mathematical Function Handbook, New York, NY: McGraw HilI, 1992. 
(Ba93) Bar-David, T., Object-Oriented Design for C++, Englewood Cliffs, NJ: Prentice Hail, 1993. 
(Be94) Beck, K., “Birds, Bees, and Browsers-Obvious Sources of Objects,” The Smalltalk Report, Vol. 3, No. 8 
June l994,p. 13. 
(Be93a) Becker, P., Conversion Confusion, C++ Report, October 1993, pp. 26-28. 
(Be93) Becker, P., “Shrinking the Big Switch Statement,” Windows Tech Journal, Vol. 2, No. 5, May 1993, pp. 
26-33. 
ue (Bd93) Berard, E. V., Essays on Object Oriented Software Engineering: Volume!, Englewood Cliffs, NJ: Prentice 
Hail, 1992. 
(Bi95) Binder, R. V., “State-Based Testing,” Object Magazine, Vol. 5, No. 4, August 1995, pp. 75-78. 
(Bi95a) Binder, R. V., “State-Based Testing: Sneak Paths and Conditional Transitions,” Object Magazine, Vol. 5, 
No. 6, October 1995, pp. 87-89. 
(B192) Blum,A., NeuralNetworksin C++:An Object-OrientedFrameworkforBuilding ConnectionistSystems, 
New York, NY: John Wiley & Sons, 1992. 
-+ (Bo91) Booch, G., Object-Oriented Design with Applications, Redwood City, CA: The Benjamin/Cummings 
Publishing Company, mc., 1991. 
(Bo94) Booch, G., Object-Oriented Analysis and Design, Second Edition, Reading, MA: Addison-Wesley Publishing Company, 1994. 
(Bo96) Booch, G., Object Solutions, Reading, MA: BenjaminlCummings, 1996. 
(Ca92) Cargill, T., Programming Style, Reading, MA: Addison-Wesley Publishing Company, 1992. 
(Ca95) Carroli, M. D., and M. A. Ellis, Designing and Coding Reusable C++, Reading, MA: Addison-Wesley Publishing Company, 1995. 
(Co95) Coplien, J. O., and D. C. Schmidt, Pattern Languages of Program Design, Reading, MA: AddisonWesley Publishing Company, 1995. 
1058 BIBLIOGRAFIA 
(C++98) ANSI/ISO/IEC: International Standard: Programming Languages-C++. 1SO/IEC 14882:1998(E). Publicado pelo the American Nationai Standards Institute, New York, NY: 1998. 
(De90) Deitei, H. M., Operating Systems, Second Edition, Reading, MA: Addison-Wesley, 1990. 
(DeOO) Deitei, H. M., and P. J. Deitei, Java How to Program, Third Edition, Upper Saddle River, NJ: Prentice Hali, 2000. 
(DeOOa) Deitei, H. M., and P. J. Deitei, The Java Multimedia Cber Classroom, Third Edition, Upper Saddie River, NJ: Prentice Hali, 2000. 
(DeOi) Deitei, H. M., and P. J. Deitei, CHow to Program (Third Edition), Upper Saddle River, NJ: Prentice Haii, 2000. 
(Du9 1) Duncan, R., “inside C++: Friend and Virtual Functions, and Muitiple Inheritance,” PC Magazine, Vol. 10, No. 17, October 15, 1991, pp. 417-420. 
(Ei90) Eliis, M. A., and B. Stroustrup, TheAnnotated C++ Refrrence Manual, Reading, MA: Addison-Wesley, i990. 
(Em92) Embley, D. W.; B. D. Kurtz; and S. N. Woodfield, Object-Oriented SystemsAnalysis, Englewood Ciiffs, NJ: Yourdon Press, 1992. 
(En90) Entsminger, G., The Tao of Objects: A Beginner’s Guide to Object-Oriented Programming, Redwood City, CA: M&T Books, 1990. 
(F193) Fiamig, B., Practi cal Data Structures in C++, New York, NY: John Wiiey & Sons, 1993. 
(Ga95) Gamma, E,; R. Heim; R. Johnson; and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Reading, MA: Addison-Wesiey Pubiishing Company, 1995. 
(Ge89) Gehani, N., and W. D. Roome, The Concurrent C Programming Language, Summit, NJ: Silicon Press, 1989. 
(Gi92) Giancoia, A., and L. Baker, “Bit Arrays with C+÷,” The C Users Journal, Voi. 10, No. 7, Juiy, 1992, pp. 2 1-26. 
(G195) Giass, G., and B. Schuchert, The STL <Primer>, Upper Saddle River, NJ: Prentice Hali PTR, i995. 
(Go95) Gooch, T., “Obscure C++,” Inside Microsofi Visual C++, Voi. 6, No. ii, November 1995, pp. 13-15. 
(Ha90) Hansen, T. L., The C++ AnswerBook, Reading, MA: Addison-Wesiey, 1990. 
(He97) Henricson, M., and E. Nyquist, Industrial Strength C++: Rules and Recommendations, Upper Saddle River, NJ: Prentice Haii, 1997. 
(Ja93) Jacobson, 1., “Is Object Technoiogy Software’s Industrial Piatform?” !EEE Software Magazine, Vol, 10, No. 1, January 1993, pp. 24-30. 
(Ja89) Jaeschke, R., Portability and the C Language, Indianapolis, IN: Hayden Books, 1989.(Ke88) Kernighan, B. W., and D. M. Ritchie, The CProgramming Language (Second Edition), Englewood Ciiffs, NJ: Prentice Haii, 1988. 
(Kn92) Knight, A., “Encapsulation and Information Hiding’ The Smalltalk Report, Vol. i, No. 8, June 1992, pp. 
19-20. 
(Ko90) Koenig, A., and B. Stroustrup, “Exception Handling for C++ (revisado),” Proceedings ofthe USENIX C++ Conference, San Francisco, CA, Aprii 1990. 
(Ko91) Koenig, A., “What is C++ Anyway?” Journal of Object-Oriented Prograinming, April/May 1991, pp. 
48-52. 
(Ko94) Koenig, A., Impiicit Base Ciass Conversions,” C++ Report, Vol. 6, No. 5, June 1994, pp. 18-19. 
(Ko97) Koenig, A., and B. Moo, Ruminations on C++, Reading, MA: Addison-Wesiey, 1997. 
(Kr9 1) Kruse, R. L.; B. P. Leung; and C. L. Tondo, Data Structures and Program Design in C, Englewood Ciiffs, NJ: Prentice Haii, 1991. 
(Le92) Lejter, M.; 5. Meyers; and 5. P. Reiss, “Support for Maintaining Object-Oriented Programs,” ÍEEE Transactions on Software Engineering, Voi. 18, No. 12, December 1992, pp. 1045-1052. 
(Li91) Lippman, 5. B., C++ Primer (Second Edition), Reading, MA: Addison-Wesiey Publishing Company, 1991. 
(Lo93) Lorenz, M., Object-Oriented Software Deveiopment: A Practical Guide, Englewood Ciiffs, NJ: Prentice Hail, 1993. 
(Lo94) Lorenz, M., “A BriefLook at Inheritance Metrics,” The Smalltalk Report, Vol. 3, No. 8, June 1994, pp. 1, 
4-5. 
(Ma93) Martin, J.. Principies of Object-Oriented Analysis and Design, Englewood Ciiffs, NJ: Prentice Hali, 1993. 
BIBLIOGRAFIA 1059 
(Ma95) Martin, R. C., Designing Object-Oriented C++ Applications Using the Booch Method, Englewood Cliffs, NJ: Prentice 1-lali, 1995. 
(Ma93a) Matsche, J. J., “Object-Oriented Programming in Standard C,” Object Magazine, Vol. 2, No. 5, January/ February 1993, pp. 7 1-74. 
(Mc94) McCabe, T. J., and Á. H. Watson, “Combining Comprehension and Testing in Object-Oriented Development,” Object Magazine, Vol. 4, No. 1, May/April 1994, pp. 63-66. 
(Me88) Meyer, B., Object-OrientedSoftware Construction, C. A. R. Hoare Series Editor, Englewood Cliffs, NJ: 
Prentice Hali, 1988. 
(Me92) Meyer, B., Advances in Object-Oriented Software Engineering, Editado por D. Mandrioli e B. Meyer, Englewood Cliffs, NJ: Prentice Hail, 1992. 
(Me92a) Meyer, B., Eiffel: The Language, Englewood Cliffs, NJ: Prentice Hail, 1992. 
(Me92b) Meyers, S., Effective C++: 50 Specific Ways to Improve Your Programs and Designs, Reading, MA: 
Addison-Wesley Publishing Company, 1992. 
(Me95) Meyers, S., More Effective C++. 35 New Ways to Improve Your Programs and Designs, Reading, MÁ: 
Addison-Wesley Publishing Company, 1995. 
(Me95a) Meyers, 5., “Mastering User-Defined Conversion Functions,” C/C+÷ Users Journal, Vol. 13, No. 8, Augusi 1995, pp. 57-63. 
(Mu93) Murray, R., C++ Strategies and Tactics, Reading, MA: Addison-Wesley Publishing Company, 1993. 
(Mu94) Musser, D. R., and A. A. Stepanov, “Algorithm-Oriented Generic Libraries,” Software Practice and Experience, Vol. 24, No. 7, July 1994. 
(Mu96) Musser, D. R., and A. Saini, STL Tutorial and Reference Guide: C++ Programming with the Standard Template Librarv, Reading, MA: Addison-Wesley Publishing Company, 1996. 
(Ne95) Nelson, M., C++ Programmer’s Guide to the Standard Template Library, Foster City, CÁ: Programmers Press, 1995. 
(Ne920) Nerson, J. M., “Applying Object-Oriented Analysis and Design,” Communications ofthe ACM, Vol. 35, No. 9, September 1992, pp. 63-74. 
(Ni92) Nierstrasz, O.; S. Gibbs; and D. Tsichritzis, “Component-Oriented Software Development,” Communications oftheACM, Vol. 35, No. 9, September 1992, pp. 160-165. 
(P190) Pinson, L. J., and R. S. Wiener, Applications of Object-Oriented Programming, Reading, MA: AddisonWesley, 1990. 
(Pi93) Pittman, M., “Lessons Learned in Managing Object-Oriented Development,” IEEE Software Magazine, Vol. lO, No. 1, January 1993, pp. 43-53. 
(P192) Plauger, P. J., The Standard C Library, Englewood Cliffs, NJ: Prentice Hail, 1992. 
(P193) Plauger, D., “Making C++ Safe for Threads,” The C Users Journal, Vol. 11, No. 2, February 1993, pp. 
58-62. 
(Po97) PohI, 1., C+ + Djstilled: A Concise ANSI/ISO Reference and Siyle Guide, Reading, MÁ: Addison-Wesley, 1997. 
(Po97a) PohI, 1., Object-Oriented Programming Using C++, Second Edition, Reading, MÁ: Áddison-Wesley Publishing Company, 1997. 
(Pr92) Press, W. H., et ai, Numerical Recipies in C, Second Edition, Cambridge, MÁ: Cambridge University Press, 1992. 
(Pr93) Prieto-Diaz, R., “Status Report: Software Reusability,” IEEE Software, Vol. 10, No. 3, May 1993, pp. 61- 
66. 
(Pr92) Prince, T., “Tuning Up Math Functions,” The C Users Journal, Vol. 10, No. 12, December 1992. 
(Pr95) Prosise, J., “Wake Up and Smell the MFC: Using the Visual C++ Classes and Ápplications Framework,” Microsoft Systems Journal, Vol. lO, No. 6, June 1995, pp. 17-34. 
(Ra90) Rabinowitz, H., and C. Schaap, Portable C, Englewood Cliffs, NJ: Prentice Hali, 1990. 
(Re9 1) Reed, D. R., “Moving from C to C++,” Object Magazine, Vol. 1, No. 3, September/October 1991, pp. 46- 
60. 
(Ri78) Ritchie. D. M.: S. C. Johnson: M. E. Lesk: and B. W. Kernighan. “UNIX Time-Sharing System: The C Programming Language,” The Beli System Technical Journal, Vol. 57, No. 6, Part 2, JuIy-Áugust 1978, 
pp. 1991-2019. 
(Ri84) Ritchie, D. M., “The UNIX System: The Evolution of the UNIX Time-Sharing System,” AT&T Beil Laboratories Technicaliournal, Vol. 63, No. 8, Part 2, October 1984, pp. 1577-1593. 
1060 BIBLIOGRAFIA 
(Ro84) Rosler, L., “The UNIX System: The Evolution of C-Past and Future,” AT&T Laboratories Technical Journal, Vol. 63, No. 8, Part 2, October 1984, pp. 1685-1699. 
(Ro00) Robson, R., Using the STL: The C++ Standard Template Librarv, SpringerVerlag, 2000. 
(Ru92) Rubin, K. S., and A. Goldberg, “Object BehaviorAnalysis,” Communications of theACM, Vol. 35, No. 9, September 1992, pp. 48-62. 
(Ru91) Rumbaugh, J.; M. Blaha; W. Premerlani; F. Eddy; and W. Lorensen, Ohject-Oriented Modeling and Design, Englewood Cliffs, NJ: Prentice Hail, 1991. 
(Sa93) Saks, D., “Inheritance,” The C Users Journal, May 1993, pp. 8 1-89. 
(Sc99) Schildt, H., STL Programmingfrom the Ground Up, Osborne McGraw-HiIl, 1999. 
(Se92) Sedgwick, R., Algorithms in C++, Reading, MA: Addison-Wesley, 1992. 
(Se92a) Sessions, R., Class Construction in C and C++, Englewood Cliffs, NJ: Prentice Hali, 1992. 
(Sk93) SkelIy, C., “Pointer Power in C and C++,” The C Users Journal, Vol. li, No. 2, February 1993, pp. 93- 
98. 
(Sm92) Smaer, S., and S. J. Melior, Object Lifecycles: Modeling the World in States, Englewood Cliffs, NJ: 
Yourdon Press, 1992. 
(Sm90) Smith, J. D.. Reusabilitv & Software Construction in C & C++, New York, NY: John Wiley & Sons, 1990. 
(Sn93) Snyder, A., “The Essence of Objects: Concepts and Terms,” IEEE Software Magazine, Vol. 10, No. 1, January 1993, pp. 31-42. 
(St95) Stepanov, A., and M. Lee, “The Standard Template Library,” Internet Distribution, Published at ftp: II butler.hpl.hp.com/stl, July 7, 1995. 
(St84) Stroustrup, B., “The UNIX System: Data Abstraction in C,”AT&TBeII Laboratories Technicaliournal, Vol. 63, No. 8, Part 2, October 1984, pp. 1701-1732. 
(St88) Stroustrup, B., “What is Object-Oriented Programming?” IEEE Software, Vol. 5, No. 3, May 1988, pp. 
10-20. 
(St88a) Stroustrup, B., “Parameterized Types for C++, Proceedings ofthe USENÍX C++ Conference, Denver, CO, October 1988. 
(St9 1) Stroustrup, B., The C+ + Programming Language (Second Edition), Reading, MA: Addison-Wesley Series in Computer Science, 1991. 
(St93) Stroustrup, B., “Why Consider Language Extensions?: Maintaining a Delicate Balance:’ C++ Report, September 1993, pp. 44-51. 
(St94) Stroustrup, B., “Making a vector Fit for a Standard,” The C++ Report, October 1994. 
(St94a) Stroustrup, B., The Design Evolution of C++, Reading, MÁ: Addison-Wesley Publishing Company, 1994. 
(St97) Stroustrup, B., The C++ Programming Language, Third Edition, Reading, MA: Addison-Wesley Publishing Company, 1997. 
(Ta94) Taligent mc., Taligent ‘s Guide to Designing Programs: Well-Mannered Object-Oriented Design in C++, Reading, MÁ: Addison-Wesley Publishing Company, 1994. 
(Ta92) Taylor, D., Object-Oriented Information Systems, New York, NY: John Wiley & Sons, 1992. 
(To89) Tondo, C. L., and 5. E. Gimpel, The CAnswerBook, Englewood Cliffs, NJ: Prentice HaIl. 1989. 
(Ur92) Urlocker, Z., “Polymorphism Unbounded,” Windows Tech Journal, Vol. 1, No. 1, January 1992, pp. 11- 
16. 
(Va95) Van Camp, K. E., “Dynamic Inheritance Using Filter Classes,” C/C++ Users Journal, Vol. 13, No. 6, June 1995, pp. 69-78. 
(Vi94) Vilot, M. J., “An Introduction to the Standard Template Library,” The C++ Report, Vol. 6, No. 8. October 1994. 
(Vo9 1) Voss, G., Object-Oriented Programming: An Introduction, Berkeley, CÁ: Osbourne McGraw-Hill, 1991. 
(Vo93) Voss, G., “Objects and Messages,” Windows Tech Journal, February 1993, pp. 15-16. 
(Wa94) Wang, B. L., and J. Wang, “Is a Deep Class Hierarchy Considered Harmful?” Object Magazine, Vol. 4, No. 7. November-December 1994, pp. 35-36. 
(We94) Weisfeld, M., “Án Álternative to Large Switch Statements,” The C Users Journal, Vol. 12, No. 4, April 1994, pp. 67-76. 
(We92) Weiskamp, K., and B. Flamig, The Complete C++ Primer, Second Edition, Orlando, FL: Ácademic Press, 1992. 
BIBLIOGRAFIA 1061 
(Wi93) Wiebel, M., and S. Halladay, “Using OOP Techniques Instead of switch in C++,” The C Users Journal, Vol. 10, No. lO, October 1993, pp. 105-112. 
(Wi88) Wiener, R. S., and L. J. Pinson, An introduction to Object-Oriented Programming and C++, Reading, MA: Addison-Wesley, 1988. 
(Wi92) Wilde, N., and R. Huitt, “Maintenance Support for Object-Oriented Programs,” ÍEEE Transactions on Software Engineering, Vol. 18, No. 12, December 1992, pp. 1038-1044. 
(W193) Wilde, N.; P. Matthews; and R. Huitt, “Maintaining Object-Oriented Software,” IEEE Software Magazine, Vol. 10, No. 1, ianuary 1993, pp. 75-80. 
(Wi96) Wilson, G. V., and P. Lu, Parailel Programming Using C++, Cambridge, MA: MIT Press, 1996. 
(Wt93) Wilt, N., “Templates in C÷+,” The C Users Journal, May 1993, pp. 33-5 1. 
(Wi90) Wirfs-Brock, R.; B. Wilkerson; and L. Wiener, Designing Object-Oriented Software, Englewood Cliffs, Ni: Prentice Hail, 1990. 
(Wy92) Wyatt, B. B.; K. Kavi; and S. Hufnagel, “Parallelism in Object-Oriented Languages: A Survey,” IEEE Software, Vol. 9, No. 7, November 1992, pp. 56-66. 
(Ya93) Yamazaki, S.; K. Kajihara; M. Ito; and R. Yasuhara, “Object-Oriented Design of Telecommunication Software,” ÍEEE Software Magazine, Vol. 10, No. 1, January 1993, pp. 81-87. 
A 
Indice 
Símbolos 
- operador unário 125 
(NOT lógico) 146-149, 1016-1017 
‘=77-78 
= (operador de desigualdade) 77-78, 518-519, 1016-1017 
# 67-68, 856 
* operador do pré-processador 860-861 
#* operador do pré-processador 860- 
861 
$ prompt da linha de comando do 
UNIX 868-869 
% operador módulo 74-75, 348 
% prompt 868-869 
& (operador dc endereço) 321-324, 
1016-1017 
& e * operadores como inversos 323- 324 
& em uma lista de parâmetros 226-227 
& para declarar referência 224-225 
&& (operador AND lógico) 146-147, 219, 1016-1017 
&= (operador AND sobre bits com atribuição) 986-987, 1016-1017 
O em uma chamada de função 194- 
196 
(1 operador 194-196 
* (operador de derreferência de 
ponteiro) 322-324 
* operador 74-75 
* * operador de exponenciação em 
BASIC 518-519 
+ operador 72-75 
++operador 125 
++ operador sobre um iterador 923-924 
++ operador de incremento unário 125 
+= operador 124-125. 518-519, 893- 
894 
* operador 1024-1026 
.h arquivos de cabeçalho 199-201 
/ operador 74-75 
/1 comentário de uma só linha 66-67 
(operador unário de resolução de 
escopo) 228-229, 475-476, 1012- 
1013, 1026 
<(operador menor que) 77-78 
«deslocamento à esquerda 72-73 
«operador 66-68 
<= (operador menor que ou igual a) 77- 78 
= operador 72-75, 148-149 
== (operador de igualdade) 77-78, 148- 149, 518-519 
> (operador maior que) 77-78 
-> (seleção de membro através de ponteiro) 1024-1025 
-> operador 1025 
>= (operador maior que ou igual a) 77- 78 
» deslocamento à direita 73-74 ?: (operador condicional ternário) 105- 106, 219 
\ seqüência de escape com caractere barra invertida 68-69 
\“ seqüência de escape com caractere aspas 68-69 
\a alarme 68-69 
\n seqüência de escape (nova linha) 68- 
69, 642-643 
\r retorno do carro 68-69 
\t68-69, 179-180 
(operador OR exclusivo sobre bits) 
1016-10 17 
‘= (operador OR exclusivo sobre bits com atribuição) 986-987, 1016-1017 
1 119-120, 1016-1017 
= (operador OR inclusivo sobre bits com atribuição) 986-987, 1016-1017 
II (operador OR lógico) 146-148, 219, 1016- 1017 
‘\O’ 355-356 
\n’ 354-355 
Numéricos 
<numeric> 928-929, 968, 970 
O ponteiro 773-774 
OX 657-65 8 
Ox 657-658 
A 
a pilha está corrompida 708-709 
a repetição termina 109-111 
a STL em programação genérica 1000- 1001, 1055-1056 
A tartaruga e a lebre 379-380 a UML 81-82,84 
a.out 61-63 
aberto 728-729 
abordagem de blocos de construção 56- 
57, 60-61 
abort 478-479, 700-701, 704-705, 
708-709, 713-7 14, 86 1-862, 875-876 abortar um programa 699-700 
“abordagem de código que funciona” 
50-51 
“abortar” 115 
“aridade” de um operador 518-519 
“array inteligente” 272-273 
abreviando expressões de atribuição 
124-125 
abreviaturas semelhantes ao inglês 55- 
56 
abrir um arquivo inexistente 732-733 
abrir um arquivo para leitura 73 1-732 
abrir um arquivo para saída 731-732 
abstração 82-83 
abstração de dados 5 1-52, 452, 479- 480, 524-525, 589-590 
ação 50-51, 105-107, 109-110, 151-152, 236-237, 479-480 
ação de sair 237-23 8 
accumulate 929-930, 967-968, 990- 991 
acessando membros union 880-881 Acessando os membros de um objeto através de cada tipo de handie para o objeto 407-408 
acessibilidade de membros da classe base em classe derivada 577-578 
acesso a função 413-414 
acesso a membro através de um handie 
407-408 
acesso a membro de classe 406-407 
acesso a membro de uma estrutura 406- 
407. 808-809 
acesso a membro private de uma classe 412 
acesso a membros de dados e funções membro não-static 478 
acesso à memória inválido 875-876 
acesso a variável global 228-229 
acesso aos dados do chamador 224-225 
acesso detault para membros de struct é publie 412-413 
acesso direto 762-763 
acesso indexado 940-941 
acesso public por default 808 
acesso verificado 892-893 
acionador (software) de dispositivo 611- 
612 
ações a serem executadas 100-101, 110- 
III 
acrescentar a saída a um outro string 
358-359 
acrescentar dados a um arquivo 730-732 
acumulador 381 
Ada 5 8-59 
adaptador 950-951 
adaptador de contêiner 919-920, 926- 927, 950-951 
adaptador de função 989-990 
adiamento indefinido 345-346 
adição 53-54, 73-76 
adicionar um inteiro a um ponteiro 338- 
339 
adicionar uma nova conta a um arquivo 
746-747 
adjacent_differerice 929-930, 985 
adjacentfind 929-930, 985-986 
adjustfield 662-665 
adulteração 230-231 
Adulteração para possibilitar ligação segura quanto ao tipo 231-232 
advertência 68-69 
ajuste da precisão 652-653 
ajuste de indicadores 657-658 
ajustes originais de formatos 663-664 
algoritmo 100-101, 104-106. 110-111. 116, 124-125,760,917-918,918- 
919, 927-928, 955 
algoritmo de “preparar-se para ir trabalhar” 100-101 
algoritmo de avaliação 803-805 algoritmo de avaliação de expressão pós-fixa 791-792 
algoritmo de avaliação pos-fixo 799- 
800, 803-805 
algoritmo de conversão de infixa para pós-fixa 791-792, 799-800, 803-805 
algoritmo de distribuição 348 
algorilmo de embaralhamento 812-813 
algoritmo de passagem única 925-926 
algoritmo de seqüência não-mutante 
928-929 
algoritmo em pseudocódigo 116 
algoritmo numérico 990-991 
algoritmo padrão 927-928 
Algoritmos básicos de classificação e pesquisa da Biblioteca Padrão 969 
algoritmos da biblioteca padrão 200- 
201 
algoritmos da STL 680-68 1 
algoritmos de classificação 969 
algoritmos de procura 969 
algoritmos de seqüência mutante 928- 
929 
algoritmos genéricos 928-929 
algoritmos matemáticos 965-966 
algoritmos numéricos 928-929 
algoritmos separados de contêiner 928- 
929 
<algorithm> 199-201. 935-936 
alias 226-227, 322-325, 907-908 
alias para o nome de um objeto 428- 
429 
aliaspara um tipo 92 1-922 alinhamento 76 1-762, 809-8 10, 880- 881 
alinhamento em limite 76 1-762 alinhamento na memória 809-8 lO, 880- 881 
alocação de espaço 544-545 
alocação de memória 200-201, 918-919 
alocação de memória dinâmica 714-715 
alocação dinâmica de memória 471, 
473-474, 76 1-764, 877-878 
alocação dinâmica de memória no estilo de C 877-878 
alocador 918-9 19, 936 
alocador default 9 18-919 
alocador personalizado 918-919 
alocar dinamicamente arrays de caracteres para armazenar strings 
575-577 
alocar dinamicamente um array de inteiros 53 1-532, 887-888 
alocar e desalocar memória dinamicamente 420-421 
alterando o fluxo de controle 144-145 
ambiente 191 
ambiente C++ 6 1-62 
ambiente chamador 73 2-733 
ambiente de desenvolvimento de programas 61-62 
ambiente de desenvolvimento GNU 
1054- 1055 
ambiente de programação 190-191 
ambiente de programação C++ 190 
ambiente hospedeiro 874 
ambiente multiusuário 778 
ambigüidade 194 196 
American National Standards Committee on Computers and Information Processing (X3) 56 
American National Standards institute 
(ANSI) 50-51, 481-482 
American Standard Code for 
Information Interchange 360-361 
análise 84 
análise de texto 390-391 
Análise dos resultados de um exame 
122- 123 
análise e projeto estruturados de 
sistemas 59-60 
and 1016-1017 
AND lógico 1016-1017 
AND lógico (&&) 146-147, 185-186, 
816-817 
AND sobre bits 1016-1017 
AND sobre bits(&)8l4-815 
AND sobre bits com atribuição 1016- 
1017 
andeq 1016-1017 
aninhamento 104-106, 129-130, 155- 
156 
aninhamento de estruturas de controle 
102-104, 120-121 
ANSI 50-51, 56. 48 1-482 
ANSI C 56, 65-66 
ANSI/ISO 9899: 199056 
any 986-987 
aparência de blocos de construção 152- 
153 
apelido 322-325 
aplicativos de acesso instantâneo 739- 
740 
aplicativos distribuídos cliente/servidor 
54-55 
append 893-894 
apresentação de caracteres 199-201 
aproximação de números em ponto 
flutuante 120-121 
área indefinida na memória 810-811 
argumento 190-193 
argumento da referência 324-325 
argumento de função 191-193 
argumento de função default 4 19-420 
argumento de linha de comando 871- 
872 
argumento de macro 857-858 
argumento default 228-229, 4 17,420 
argumento para uma macro 857-858 
argumentos default com construtores 
4 17,420 
argumentos mais à direita (finais) 228- 
229 
argumentos na ordem correta 194-195 
argumentos passados para construtores 
de objetos membro 460-461 
argv[] 870-871 
aritmética 63 
aritmética de inteiros 516 
aritmética de ponteiros 338-342, 933- 
934 
aritmética de ponteiros é dependente de 
máquina 338-339 
1064 ÍNDICE 
aritmética de ponteiros sobre um array de caracteres 339-340 
aritmética de ponto flutuante 516 
armazenagem livre 714-715 
ARPA 63-64 
ARPAnet 63-64 
arquivo 727-729, 735, 808 
arquivo de acesso aleatório 727, 739- 742, 744-746 
arquivo de acesso seqüencial 727, 729- 730, 733-734, 738-740 
arquivo de cabeçalho 199-201 408-409, 
411-412,583-584, 62 1-622, 857, 
873-874, 928-931, 935-937, 941-944, 
946, 949-955, 968, 970, 974-976 
arquivo de cabeçalho <cassert> 861- 
862,478-479 
arquivo de cabeçalho <cctype> 200- 201, 329-330, 858-859, 825 
arquivo de cabeçalho <csdtlib> 713- 714 
arquivo de cabeçalho <csignal> 875- 876 
arquivo de cabeçalho <cstdio> 858- 859 
arquivo de cabeçalho <cstdlib> 478- 479, 874, 877-878 
arquivo de cabeçalho <exception> 
706-707 
arquivo de cabeçalho <fstream> 728- 729 
arquivo de cabeçalho <iomanip h> 
119-120 
arquivo de cabeçalho <iomanip> 857, 639-640, 65 1-652, 657-658 
arquivo de cabeçalho <iostream> 
67-68, 200-201, 639-640, 728-729, 
857, l0l0-l0l2 
arquivo de cabeçalho <iostreain. h> 
139- 140 
arquivo de cabeçalho <memory> 714- 715 
arquivo de cabeçalho <new> 711-713 
arquivo de cabeçalho <s tdexcept> 
716-7 17 
arquivo de cabeçalho de entrada/saída 
em streams <iostream> 67-68 
arquivo de cabeçalho definido pelo 
programador 199-201 
arquivo de contas a receber 727-729 
arquivo de estoques 727-729 
arquivo de folha de pagamento 727-729 
arquivo de implementação 484-485 
arquivo de n bytes 729-730 
arquivo de texto 745-746 
arquivo de transações 756 
arquivo em disco 803 
arquivo objeto 62 1-622 
arquivo objeto pré-compilado 484-485 
arquivo seqüencial 727-730, 734-735 
arquivo-fonte 873-874 
arquivos de cabeçalho 432-434 
arquivos de cabeçalho da biblioteca padrão 199-201, 856 
arquivos de cabeçalho de contêineres da biblioteca padrão 92 1-922 
arquivos de cabeçalho no “estilo antigo” 
199-200 
arquivos de cabeçalho padrão 191-193 
arquivos de código-fonte 408-409 
arquivos-fonte múltiplos 408-409 
array “bruto” 480-481 
Array “inteligente”929-930 
array 262-264, 33 1-332, 480-483, 762- 
763 
Array 9 17-918 
array associativo 949-950 
array automático 265-267 
array baseado em ponteiro no estilo de 
C 955-956 
array bidimensional 292-298, 3 12-313, 
345-346, 760 
array bidimensional deck 345-346 
array de caracteres 273-274, 343-344, 
355-356, 522-523, 904-905 
array de caracteres como um string 274- 
275 
array de ponteiros para funções 387-388 
array de strings 345-346 
array de strings suit 345-346 
array dinâmico 877-878 
array local automático 276-277 
array m por n 292-293 
array multidimensional 294 
array no estilo deC 9 19-920 
array unidimensional 3 26-327, 329, 
335-336 
arrays baseados em ponteiros 262 
arrays com múltiplos subscritos 292- 
293, 295 
arrays e funções 279-281 
arrays passados por referência 282-283 
arrays que conhecem seu tamanho 480- 
481 
arredondando 119-120 
arredondar 192-193 
árvore 482-483, 760-761, 780-781, 787- 
788 
árvore balanceada 787-788 
árvore binária 760, 780-78 1, 784-785, 981, 983-984 
árvore binária com duplicatas 793-794 
árvore de pesquisa binária 780-781, 
785-787, 793-794 
ASCJI (American Standard Code for 
information Interchange) 139-140, 
360-361, 645-646 
aspas 67-69 
aspas vazias (string nulo) 740-741 
asserção 478-479 
assert 478-479, 532-534, 543-544, 575-577,699-700,711-712, 861-862 
<assert.h> 200-201 
assign 892-893, 940-941 
assinatura 198-199, 230-231, 546-547, 573,577-578,610-611,622,624-625 
assinatura de uma função 198-199 
assíncrono 697-698 
associa da direita para a esquerda 81- 
82, 126-127, 139-140 
associa da esquerda para a direita 126- 
127 
associação l62-l63, 949-950 
associações 83-84. 161-162 
associações entre classes 162-163 
associatividade 8 1-82, 148-149 
associatividade da direita à esquerda 
81-82 
associatividade de operadores 75-76 
associatividade não-alterada por 
sobrecarga 518-519 
asterisco (*) 74-75, 184-185 
at 893-894, 907-908, 929-930, 936, 
986-987 
AT&T 59-60 
atender 299-300, 404-405, 412 
atexit 874 
ativações 302-304 
atividade 237-238, 302-304 
atof 829-830 
atoi 801-805, 829-831 
atol 829-830 
ator 159-160 
atribuição de array 480-481 
atribuição de objetos de classes 413- 
414,446-447 
atribuição de ponteiro 340-34 1 
atribuição de ponteiros para classe 
derivada a ponteiros para classe base 
568-569 
atribuição de string 891-892 
atribuição de tring de caracteres a 
objetos string 543-544 
atribuição de um objeto a outro 430-431 
Atribuição de um objeto a outro com 
cópia default membro a membro 
430-431 
atribuição de uma estrutura a uma 
estrutura do mesmo tipo 808-809 
atribuição de uma union a uma outra 
union do mesmo tipo 880-881 
atribuição membro a membro 516-5 17 
atribuição membro a membro default 
5 16-5 17 
atribuir novamente a uma referência 
227-228 
atribuir um iterador a outro 927 
atribuiu o valor de 79-80 
atributo 396, 400-401 
atributo “const” 1023-1024 
atributos 82-84, 161-162, 234-235, 298- 
299, 366-367 
atributos de classes 366 
atributos de uma variável 208-209 
atualizar registros no lugar 739-740 
atualiLar um registro 757 
áudio 639-640 
auto 208-210 
auto-atribuição 469-470, 534, 544-545 
auto2tr 714-716 
autodocumentação 70-71 
automóvel 186, 188 
auxflio à depuração 859-860 
avaliação da esquerda para a direita 75- 
77 
avaliador pós-fixo 802-803, 805-806 
avaliando expressões 774-775, 79 1-792 
avaliando uma expressão pós-fixa 792- 
793 
avanço do formulário (‘ \f’) 825,

Continue navegando