O documento apresenta um resumo sobre tópicos fundamentais da linguagem de programação C/C++, incluindo diretivas, variáveis, constantes, entrada e saída, estruturas de controle, vetores, matrizes, ponteiros, arquivos e conceitos orientados a objetos como classe e herança.
2. Índice
Tópicos para C:
1. Diretivas do C/C++
2. Variáveis
3. Constantes
4. Constantes de barra Invertida
5. Entrada e Saídas padronizadas
6. Operadores Aritméticos e Lógicos
7. Estrutura de Controle de fluxo
8. Vetores
9. Matrizes
10. Ponteiros
11. Abrindo e Fechando Arquivos
Tópicos para C++:
1. Struct
2. Objeto e Classe
3. Funções e Classes “Friends”
4. Construtores/Destrutores
5. Herança
6. Herança Múltipla
7. Alocação Dinâmica em Memória
8. Polimorfismo
3. Breve história
A linguagem C foi desenvolvida nos anos 70 por
Dennis Ritchie em um DEC PDP-11, usando o
Sistema Operacional UNIX.
O C++ foi concebido após a detecção de algumas
limitações da linguagem C. Por isso, o estudioso
Bjarne Stroustrup acrescentou ao C novas intenções
e em 1983 o C++ foi criado.
4. Diretivas do C/C++
São comandos que não são compilados, sendo
dirigidos ao pré-processador, que é executado pelo
compilador antes da executar o processo de
compilação propriamente dito.
Todas as diretivas são inicializadas com #.
Ex: #include
#ifdef
#define
5. Diretivas do C/C++
#include – Diz ao compilador para incluir, na hora
compilação, um arquivo especificado.
Ex: #include <nome_arquivo> ou
#include “nome_arquivo”
- A diferença entre < > e “ ” é só a ordem de procura no
diretório.
6. Diretivas do C/C++
# ifdef – É diretiva de compilação condicional.
Ex: #ifdef nome_arquivo
Sequencia_declarações
....
#endif
7. Variáveis
Os tipos básicos de variáveis do C são: char, int, float, void
e double. Os long e short promovam tamanhos diferentes
de inteiros onde for preciso.
Estrutura:
tipo_variavel lista_variaveis;
importante: O tipo de variável no C por default é o int.
9. Variáveis
importante: Existe três tipos de lugares onde as variáveis
podem estar:
- Fora das funções do programa, são chamadas de var.
globais e pode ser usada em qualquer lugar no programa.
- Dentro de um bloco de código, são chamadas de var. locais
e só tem validade dentro de bloco onde foram declaradas.
- Na lista de parâmetros de uma função, são conhecidas
somente pela função onde são declaradas.
10. Constantes
Constantes são valores que são mantidos fixos pelo
compilador, pode ser números e caracteres.
importante: Para inserir uma constante de
hexadecimais, basta colocar no começo “0x” e nas
constantes octais começasse em 0.
11. Constantes de barra invertida
São códigos que facilitam a tarefa do programado.
A lista abaixo mostra alguns destes códigos:
Código Significado
b
f
n
r
a
0
Retrocesso(“back”)
Alimentação de folha (feed)
Nova linha (“new line”)
Retorno do carrier
Sinal sonoro (“beep”)
Nulo (0 em decimal)
12. Entradas e Saídas padronizadas
O sistema de entrada e saída da linguagem C esta
estruturado na forma de uma biblioteca de funções. Na
linguagem C, um arquivo é entendido como um conceito
que pode ser aplicado a arquivos de disco, entre outros.
Um fluxo é associado a um arquivo através da realização de
uma operação de abertura. Quando aberto, as informações
podem ser trocadas entre o arquivo e o programa.
13. Entradas e Saídas padronizadas
Para ler e escrever strings:
- gets(): pede para que o usuário entre com uma string.
- puts(): coloca a string na tela.
- printf(): comando que imprime na tela, possui dois
componentes, primeiro é os caracteres a serem impressos e
o segundo é o comando de formato.
- scanf(): comando que recebe parâmetros. (também possui
dois parâmetros, primeiro é o tipo da variável e segundo é
o nome do parâmetro).
- ...
importante: o scanf recebe somente ponteiros como
parâmetros, isso significa que as variáveis que não sejam
ponteiros devem ser precedidas por &.
14. Entradas e Saídas padronizadas
getch() e getche(): Espera o usuário digite uma
tecla e retorna esse caractere. A diferença entre
getche e getch é que o getche gera um “eco” na tela
antes de retornar a tecla.
importante: Elas se encontrão no arquivo conio.h e
não são definidas pelo padrão ANSI. São funções
apenas para compiladores do DOS.
15. Entradas e Saídas padronizadas
Código Formato
%c Um único caractere (char)
%i Um numero inteiro
%f Um ponto flutuante
%x Número octal
%s String
%p Ponteiro
%d Um número decimal (int)
16. Operadores aritméticos
São usados para desenvolver operações matemáticas.
A tabela abaixo mostra os operadores do C:
Operador Função
+
-
*
/
%
++
--
Soma (inteira e ponto flutuante)
Subtração ou troca de sinal
Multiplicação
Divisão
Resto de divisão
Incremento
Decremento
17. Operadores Lógicos
Realizam comparações entre variáveis.
&& AND(E) x && y x e y
|| OR(OU) x || y x ou y
! NOT(NÃO) x ! y x not y
18. Estruturas de controle de fluxos
São comandos que da condições ao programador de
saltar ou repetir comandos. Sem elas o programa
executado teria de ser de cima para baixo através de
comando a comando.
Serão vistos abaixo, alguns comandos mais
utilizados na linguagem de programação C/C++.
19. Estruturas de controle de fluxos
Comando if : Condição de avaliação, se for zero, a declaração
não será executada.
Estrutura:
if (condição) declaração;
Comando else : É o comando complementar do comando if.
Estrutura:
if (condição) declaração 1;
else declaração 2;
condição?
bloco 1 bloco 2
20. Estruturas de controle de fluxos
Comando switch : Como o if , o switch também é um
comando de tomada de decisão. É utilizado para testa uma
variável em relação a diversos valores preestabelecidos.
Estrutura:
switch (variavel)
{
case constante 1:
declaração 1;
break;
}
importante: Pode-se ter inúmeros casos e multi-
variaveis.
conjunto 1
conjunto N
conjunto 2
conjunto D
...
expressão
rotulo 1
rotulo N
rotulo D
rotulo 2
21. Estruturas de controle de fluxos
Comando for : O comando for é uma estrutura de loops
de repetição. Ele repete a condição até que seja falsa.
Estrutura:
for (inicialização;condição;incremento)
{
declaração;
}
22. Estruturas de controle de fluxos
Loop infinito: é quando a condição do for é inexistente,
fazendo com que haja uma repetição infinita.
Estrutura:
for (inicialização; ; incremento)
{
declaração;
}
importante: Para gerar tempos de espera, basta criar um
loop sem conteúdo(omitindo a declaração).
23. Estruturas de controle de fluxos
Comando while : É uma estrutura que testa uma condição e gera
um loop até que esta condição seja falsa.
Estrutura:
while (condição)
{
declaração;
}
bloco
condição?
V
F
24. Estruturas de controle de fluxos
Comando break : Este comando quebra (interrompe) a
execução do loop.
Comando continue : Este comando é o oposto do
break, quando este comando é encontrado, o loop pula
para a próxima interação.
25. Estruturas de controle de fluxos
Comando do-while : É a mesma estrutura do while,
porém, este comando garante que a declaração execute
pelo menos um vez.
Estrutura:
do{
declaração;
} while(condição);
bloco
condição? V
F
26. Estruturas de controle de fluxos
Comando goto: É um comando de salto incondicional,
realiza um salto para um local especifico, determinado
pelo rótulo.
Estrutura:
nome_rotulo:
...
goto nome_rótulo;
...
importante: deve-se declarar o nome do rótulo na posição
para qual vamos dar o salto seguido de :.
27. Vetores
Vetores são matrizes unidimensionais e uma estrutura
de dados muito utilizada. É caracterizada por ter todos
os elementos pertencente ao mesmo tipo de dado.
Estrutura:
tipo_variavel nome_variavel [tamanho];
Ex: float vetor[10];
importante: lembrar que este vetor possui dados de 0-
19.
28. Matrizes
São dados N-dimensionais.
Estrutura:
tipo_variavel nome_variavel [tam1] [tam2]...[tam N] =
{lista_valores};
Ex: float matriz [2] [3] = {1,2,3,4,5,6};
importante: essa configuração diz que os valores 1,2,3 estão
na primeira linha e os valores 4,5,6 estão na segunda linha
(como uma matriz comum).
29. Matrizes - Bidimensionais
São bidimensionais e a sua declaração é parecido
com a declaração de um vetor.
Estrutura:
tipo_variavel nome_variavel [altura][largura];
importante: o índice a esquerda indica as linhas e a da
direita indica as colunas.
30. Matrizes - Strings
São matrizes bidimensionais e se comportam como uma
lista de vetores.
Estrutura:
char nome_variavel [numero_str][compr_strg];
importante: Para acessar uma string individual basta
determinar o índice.
Ex: char nome_variavel [indice];
31. Matrizes Multidimensionais
Funciona basicamente como outro tipos de matrizes. O
índice que varia mais rapidamente é o índice da direita.
Estrutura:
tipo_variavel nome_variavel [tam1][tam2]...[tamN];
ou
tipo_variavel nome_variavel [tam1][tam2]...[tamN] =
{valores};
32. Ponteiros
Os ponteiros guardam endereços de memória. Ao
declarar um ponteiro no C, informamos ao compilador
para que tipo de variável vamos apontá-lo.
Estrutura:
tipo_variavel *nome_variavel;
importante: O * faz com que o compilador saiba que
aquela variável não vai guardar um valor, mas sim um
endereço de tipo especificado.
33. Ponteiros
importante: Todo ponteiro deve ser inicializado
(apontado para um lugar conhecido).
O operador & é usado para saber o endereço de uma
variável.
Estrutura:
int conta = 10;
int *pt;
pt = &conta;
34. Ponteiros
importante:
- Para igualar dois ponteiros basta fazer: p1 = p2.
- Para fazer com que a variável apontada de p1 tenha
o mesmo conteúdo da variável apontada em p2,
deve-se fazer: *p1 = *p2.
- Para incrementar o conteúdo da variável apontado
pelo ponteiro, basta fazer: (*p)++;
importante: Se você incrementar um *char ele anda
1 byte na memória...
36. Ponteiros (vetores)
importante: um ponteiro é uma variável, porem, o
nome de um vetor não é um vetor, logo não se altera
o endereço que é apontado pelo “nome do vetor”.
Ex:
int vetor[10];
int *ponto, i;
ponto = &i;
37. Abrindo e Fechando em Arquivo
Abrindo Arquivo
- fopen : tem como função abertura de arquivos,
através de um ponteiro de um arquivo.
Estrutura:
FILE *fopen (char *nome_arquivo, char* modo);
importante: o nome arquivo indica qual arquivo abrir e o
nome deve ser valido no SO, como também, que tipo de uso
fará do arquivo.
38. Abrindo e Fechando em Arquivo
Fechando Arquivo
- exit : Esta função aborta a execução do programa. Pode
ser chamada em qualquer ponto no programa e faz com que
termine e retorne para o SO o código de retorno.
- fclose : Determina o arquivo a ser fechado.
Estrutura:
void exit (int codigo_retorno);
int fclose (FILE * nome_arquivo);
importante: o exit() fecha todos os arquivos que um
programa que estiver aberto.
40. Abrindo e Fechando em Arquivo
Escrevendo e Lendo Caracteres em Arquivo
- putc : É uma função de escrita de arquivos.
Estrutura:
int putc (int ch, FILE *fp);
- getc : Retorna um caractere lido no arquivo.
Estrutura:
int getc (FILE *fp);
41. Struct
O struct é exatamente igual a uma classe. A única diferença é que o
direito de proteção "default" é public, ao contrário da classe onde é
private.
Estrutura:
struct conta
{
float atualizacao(float saldo)
{
return saldo;
}
float deposita(float saldo, float num)
{
saldo -= num;
return saldo;
}
float saque(float saldo, float num)
{
saldo += num;
return saldo;
}
public:
float saldo, num;
};
42. Classe e Objeto
O que é um objeto?
- Um objeto é entendido como uma entidade de dados dentro da
memória que, basicamente, deve ser responsável por seu conteúdo, ou
seja, um objeto deve ser capaz de gerenciar seu conteúdo
autonomamente, ou prover meios de outras entidades de código fazê-lo
de forma segura.
43. Classe e Objeto
Uma das principais características da linguagem "C++" é o conceito de
objetos e de sua estrutura, a classe. Uma classe define um tipo de dados
abstrato que agrupa tanto campos de dados (da mesma forma que uma
estrutura) como rotinas.
Uma classe é como uma declaração de tipo de dados. Assim como todas
as variáveis de um determinado tipo, todos os objetos de uma dada
classe possuem seus próprios campos de dados (atributos) e rotinas
(procedimentos), mas compartilham os nomes desses atributos e
procedimentos com os demais membros da mesma classe.
46. Funções e Classes “Friends”
Uma função que não é membro de uma classe pode acessar seus
componentes privados se for declarada como "friend" da classe.
A grande utilidade de funções "friend" é permitir a comparação de
valores pertencentes a duas classes distintas.
Existem também classes amigas. Uma classe amiga pode ter acesso
aos dados privados da classe que a declarou como amiga.
A declaração "friend", embora em muitas situações seja um recurso
necessário, deve ser usada com cuidado visto que é uma forma de se
abrir exceções no "escudo" do encapsulamento das classes.
47. Construtores e Destrutores
Construtor: É a função que é chamada sempre que é criado
um objeto de uma classe para fazer a inicialização.
Destrutor: É a função que é chamada sempre que o escopo
de duração do objeto de uma classe encerra-se, fazendo a
"limpeza".
49. Herança
Ela fornece meios de promover uma extensão do código, a reutilização
e uma maior coerência lógica no modelo de implementação.
Estas características nos possibilitam diversas vantagens,
principalmente quando o mantemos bibliotecas para uso futuro de
determinados recursos que usamos com muita frequência.
Tome como exemplo uma classe “veiculo” que possui algumas
características inerentes a ele, e agora exista uma outra classe “carro”
que possua as mesmas características de “veiculo” mais as suas
características particulares .
Conclusão: Pode-se dizer que “carro” herda características básicas
de “veiculo”.
50. Herança
importante: todos os elementos públicos (public) da
classe base se mantém públicos nas classes derivadas.
imporante: todos os membros públicos da classe passam
a ser privados na classe derivada.
51. Herança Múltipla
Um classe pode herdar atributos de mais de uma classe.
Para tal, se usa uma lista de entradas, separadas por
vírgulas, de classes com seus respectivos direitos de acesso,
na lista de classes base da classe derivada.
Estrutura:
class classe_derivada: acesso classe_base1, acesso classe_base2,...
52. Alocação Dinâmica em Memória
Alocação Dinâmica de Vetores:
Declara-se um vetor alocando-se uma região de memória suficiente
para armazenar a quantidade de elementos de um dado tipo que se
pretende e o endereço inicial desta área é armazenado em uma variável
ponteiro.
O operador "new" aloca uma região de memória para conter a
estrutura de dados solicitada. Pode ser usada tanto para alocação de
vetores como de variáveis simples ou objetos. No caso de alocação de
vetores deve ser especificado o número de posições do vetor entre
colchetes após o tipo de dados base.
importante: A liberação da área de memória alocada com "new" deve
ser feita com o uso do operador "delete".
53. Alocação Dinâmica em Memória
Alocação Dinâmica de Objetos:
A única diferença entre a alocação dinâmica de uma variável
qualquer e a alocação dinâmica de um objeto, é que no caso
de objetos a utilização do operador "new" implicará na
ativação da função construtora e o uso do operador "delete"
na ativação da função destrutora.
54. Polimorfismo
O polimorfismo é um conceito muito utilizado em programação
orientada objeto.
Basicamente é o processo pelo qual diferentes implementações de
uma função que pode ser acessada pelo mesmo nome.
O polimorfismo se caracteriza por "uma interface - múltiplos
métodos". Isto significa que se pode acessar da mesma maneira
uma classe geral de operadores, ainda que as ações específicas as
quais estão associadas a cada operação possam ser diferentes.
O polimorfismo é suportado tanto em tempo de compilação como
em tempo de execução. A sobrecarga de operadores e funções é
um exemplo de polimorfismo em tempo de compilação.