Programar em C++
141 pág.

Programar em C++


DisciplinaLinguagem de Programação Estruturada128 materiais1.055 seguidores
Pré-visualização34 páginas
os valores, de
fato, não são interpretados imediatamente pelo compilador, antes são identificados e substituidos pelo
preprocessador no estágio anterior à compilação. Por exemplo:
#define BUFFER_LENGTH 2048
...
...
...
char data[BUFFER_LENGTH];
Observe que o valor 2048 será usado logo abaixo no código, depois que o preprocessador substituir a constante
simbólica BUFFER_LENGTH pelo valor que lhe foi atribuído.
Note que as constantes são escritas com todas as letras maiúsculas, isso não é uma regra, mas ajuda a identificar o
que é constante simbólica dentro do programa, sendo adotado pela maioria dos desenvolvedores como uma boa
prática de programação.
Neste caso, podemos definir valores simbólicos compostos, por exemplo:
#define BUFFER_LENGTH 2048
#define N_BUFFERS 100
#define MASTER_LENGTH ( BUFFER_LENGTH * N_BUFFERS )
...
...
...
char screen[MASTER_LENGTH];
Os valores podem ser simbólicos em formato de código, o que permite criar programas com melhor legibilidade.
Para isso podemos colocar expressões com funcionalidades bem definidas substituídas por nomes que as
identifiquem. Por exemplo:
float a[3];
#define PRINT_VECTOR cout << a[0] << &quot; , &quot; << a[1] << &quot; , &quot; << a[2] << endl
...
...
Variáveis e constantes 13
PRINT_VECTOR;
Desta forma, todas as vezes que quisermos mostrar o valor do vetor de três coordenadas podemos usar a constante
PRINT_VECTOR.
Literais
Constantes literais podem ser declaradas da mesma forma que na linguagem &quot;C&quot;, ou seja, podemos definir valores
fixos em qualquer parte do programa, expressando-os diretamente no código através de seu valor significativo. Por
exemplo, podemos definir números:
256 //decimal
0400 //octal
0x100 //hexadecimal
Também podemos definir valores para caracteres ou cadeias de caracteres, como segue:
'a' // um caractere
&quot;abc&quot; // uma cadeia de caracteres
&quot;\xF3\x23\x12&quot; // uma cadeia de caracteres representada por seus 
valores em hexadecimal
Temos ainda a possibilidade de declarar constantes compostas por valores e operadores:
(4.23e14 * (12.75 + 12976.18/36)) // constante composta
Enumerações
Valores enumerados são muito recorrentes nos ambientes de programação, por isso podemos contar com a
declaração de enum em C++ também, o que segue a mesma sintaxe que temos em &quot;C&quot;:
enum seq {A,B,C,D};
seq x;
ou ainda:
enum nomes {LANY=100,SANDRA=200,MARCIA=300,RODRIGO=400};
nomes x;
Porém, observamos uma diferença: a palavra enum pode ser dispensada na declaração da variável, enquanto que em
C é obrigatório,apesar desta pequena diferença a funcionalidade do recurso é a mesma, ou seja, pode-se definir
variáveis que assumem estritamente os valores presentes na declaração de enumeração.
Este recurso torna-se útil na padronização de valores a serem usados como entrada de funções, por exemplo. Pode
ser considerada como uma funcionalidade mnemônica, seu uso não altera o código final caso modifiquemos o
programa para que use variáveis inteiras ou strings de mesmo valor do enum.
A seguinte sintaxe:
seq x = 3;
Não é permitida, mesmo que o valor presente no enum seja avaliado como 3 pelo compilador em tempo de 
compilação. Isso pode parecer confuso, mas lembre-se de que os valores serão atribuidos pelo compilador, logo isso
Variáveis e constantes 14
evita que o mesmo programa seja compilado em ambientes diferentes e tenha comportamento diferente.
Variáveis
As variáveis no C++ podem ser usadas da mesma forma que na linguagem &quot;C&quot;, porém algumas poucas diferenças
podem ser destacadas, principalmente aquelas que trazem à linguagem C++ características próprias da orientação a
objetos.
Tipos
Como na linguagem &quot;C&quot;, os tipos nativos do compilador em uso são referenciados por:
 char
 int
 float
 double
Que correspondem a números com tamanho relativos, com os significados respectivos: caractere, inteiro, ponto
flutuante e ponto flutuante de dupla precisão. De qualquer forma a extensão dos mesmos depende da máquina que se
pretende programar. Considerando que nem sempre teremos que programar apenas computadores, poderemos ter
extensões bem distintas dependendo do hardware a ser programado, por exemplo, computadores domésticos
tipicamente tem processadores de 32 ou 64 bits hoje em dia, enquanto que dispositivos embarcados podem ter
processadores de 8, 16 ou 32 bits. Portanto, o compilador para cada caso atribui faixas diferentes para cada tipo em
cada situação.
A linguagem C++ introduz o tipo bool, que representa o valor booleano, falso ou verdadeiro, o que não existe na
linguagem &quot;C&quot;, porém seu tamanho na memória depende da capacidade de otimização do compilador usado.
Tipicamente os compiladores para computadores usam uma variável do tamanho de char para representar o valor, o
que poderia ser considerado um desperdício, mas devido à abundância de memória não chega a ser inadequado.
Porém em sistemas pequenos há compiladores que armazenam o valor booleano em apenas um bit. Obviamente, se o
processador possuir recursos de manipulação de bits isso é muito útil e pode ser usado como um fator de melhoria da
qualidade do software desenvolvido. Em outros ambientes, onde a manipulação de bits traga prejuízo para o
desempenho usa-se a estratégia padrão de desperdiçar um pouco de espaço em favor de uma agilidade maior nas
operações. Portanto, embora as variações de utilização do espaço sejam muitas, o compilador sempre fará a mais
apropriada para cada ambiente de utilização da linguagem.
Modificadores
O C++ conta com os modificadores de amplitude (short,long) presentes na linguagem &quot;C&quot; e modificadores de
acesso, alguns exclusivos do C++, que estão diretamente ligados a características da POO (programação orientada a
objetos). Desta forma descreveremos apenas os tipos relevantes exclusivamente para a programação na linguagem
escopo do livro presente sem nos aprofundarmos na teoria por trás dos mesmos. A prática do uso dos mesmos é
melhor indicada como meio de aprofundamento do tema.
Assim contamos com os modificadores da linguagem &quot;C&quot;:
static
short
long
unsigned 
signed
Variáveis e constantes 15
const
A linguagem C++ introduz um novo modificador chamado const, que tem comportamento variado dependendo do
local onde está sendo declarado. Sua função, basicamente, é estabelecer um vínculo entre declaração e
obrigatoriedade da coerência no uso do símbolo declarado.
A princípio, quando declaramos uma constante com este modificador fazemos com que seja obrigatório o uso do
símbolo de forma que o mesmo não possa ter seu valor alterado. Assim, se fizermos:
const int x = 4;
O inteiro x não poderá deixar de ter valor igual a 4. Qualquer tentativa de modificar o valor da constante ao longo do
programa será reportada como erro pelo compilador. Porém podemos considerar esta funcionalidade como óbvia e
trivial, ainda temos o uso do modificador de uma forma mais proveitosa, na passagem de parâmetros para funções,
por exemplo:
void inhibitX(const int *x)
{
...
...
 BASEADDRESS = z*((*x) - 23p*71);
...
...
}
Neste caso, a função acima recebe um valor inteiro através de um ponteiro, que não obrigatoriamente precisa ser
constante no escopo fora da função, porém dentro da mesma a variável será constante. Fazendo este simples
procedimento teremos como fazer com que um símbolo seja variável fora da função e constante dentro da mesma, de
forma que dentro do escopo da mesma só façamos leituras do seu valor. O artifício cria duas consequëncias
importantes: a primeira é a melhor legibilidade do código, visto que ao usarmos uma função teremos certeza de que
os valores não serão alterados dentro da função; a segunda é que poderemos evitar erros inadvertidos de atribuição
de valores à variável quando da construção da função.
volatile
Uma variável &quot;volátil&quot;, como a própria expressão sugere, é uma variável que pode ser modificada