|
|
|
| [ 32.4 ]
Como você controla o que acontece se você tem uma biblioteca de classes C++ com
verificação dinâmica de tipos? |
|
- Quando tudo é derivado de uma única classe raiz,
normalmente Object
- Quando as classes container (List, Stack, Set, etc)
não são templates
- Quando as classes container (List, Stack, Set, etc)
inserem/extraem elementos como pointers para Object. Isso permite que
você coloque Apple dentro do container, mas quando você resgata esse elemento do
container, o compilador sabe apenas que é algo derivado de Objeto, logo você tem que
usar um pointer cast para converter o elemento de volta a um Apple*; é
sua responsabilidade controlar as coisas e garantir que este elemento seja realmente um Apple.
Você pode fazer o pointer cast com segurança usando dynamic_cast, mas esse teste
dinâmico é exatamente isso: dinâmico. Esse estilo de codificação é a essência da
verificação dinâmica de tipos em C++. Você chama uma função que diz: converta esse Object em um Apple ou devolva-me NULL se isso não for um Apple, mas você não sabe o que
realmente vai acontecer até que o código seja executado.
Quando você usa templates para implementar seus
containers, o compilador C++ consegue validar estaticamente 90% das informações sobre
tipos de dados de sua aplicação (90% aqui é uma forma de dizer praticamente tudo, alguns alegam que a verificação atinge 100%, mas aqueles que usam classes persistentes conseguem um pouco menos que 100% de
verificação estática). O ponto básico é: em C++ você consegue genericidade
a partir de templates, não a partir de herança. |
|
|
|
| [ 32.5 ] O que é o
NIHCL? Onde que posso obtê-la? |
|
| NIHCL é a abreviatura de National-Institute-of-Health's-class-library. Pode ser adquirida via ftp://128.231.128.7/pub/NIHCL/nihcl-3.0.tar.Z
NIHCL (algumas pessoas pronunciam N-I-H-C-L, outras
pronunciam nickel) é uma tradução para C++ da biblioteca de
classes Smalltalk. Há casos em que o uso que NIHCL faz de verificação dinâmica de
tipos é realmente benéfico (por exemplo, em objetos persistentes). Mas há também casos
em que o modo como usa verificação dinâmica de tipos tem um certo conflito com a característica de verificação estática de
tipos da linguagem C++. |
|
|
|
| [ 32.6 ] Onde, na
Internet, eu posso conseguir o código que acompanha Numerical Recipes? |
|
| Esse software é vendido e portanto seria ilegal
oferecê-lo gratuitamente na Internet. Contudo, seu preço é de apenas US$ 30,00 |
|
|
|
| [ 32.7 ] Porque meu
executável é tão grande? |
|
| Há quem fique surpreso como tamanho que os
executáveis atingem., especialmente quando o código fonte é trivial. Um simples
programa hello word pode gerar um executável maior do que normalmente se espera (40Kb
ou mais). Uma das razões para que os executáveis
sejam grandes é o fato de que partes da biblioteca de execução (runtime library)
do C++ são incorporadas ao seu programa. A incorporação de bibliotecas de execução
depende do que você usa no programa, e de como as bibliotecas em uso foram subdivididas
pelos seus implementadores. Por exemplo, a biblioteca <iostream.h> é bem
grande, composta de numerosas classes e funções virtual. O uso de qualquer
parte dessa biblioteca vai fazer com ela seja praticamente toda incorporada ao seu
programa, devido às interdependências internas ao código da biblioteca.
Você pode diminuir o tamanho de seu programa usando uma
versão da biblioteca com ligações dinâmicas, ao invés de usar a versão estática.
Consulte os manuais de seu compilador, ou o suporte
técnico do fornecedor, para maiores detalhes. |
|
|
|
| [ 32.8 ] Onde que
consigo toneladas e mais toneladas de informações adicionais sobre bibliotecas de
classes C++? |
|
| Em C++
Libraries FAQ, mantida por Nikki Locke |
|
|
|