Autor: Maurício Moreira Neto
Universidade Federal do Ceará - UFC
Í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
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.
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
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.
Diretivas do C/C++
 # ifdef – É diretiva de compilação condicional.
Ex: #ifdef nome_arquivo
Sequencia_declarações
....
#endif
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.
Variáveis
 r
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.
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.
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)
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.
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 &.
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.
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)
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
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
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++.
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
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
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;
}
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).
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
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.
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
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 :.
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.
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).
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.
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];
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};
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.
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;
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...
Ponteiros (vetores)
 Estrutura:
nome_variavel[indice];
ou
*(nome_variavel+indice);
importante: o nome da variável que foi declarada é na
verdade um ponteiro para o tipo da variável da matriz. Pois
ele aloca na memória o espaço para a matriz e toma o nome
da variável (ponteiro), apontando para o primeiro elemento
da matriz.
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;
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.
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.
Abrindo e Fechando em Arquivo
 a
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);
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;
};
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.
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.
Classe
 Estrutura:
class nome_da_classe
{
public/private/protected:
tipo_argumento nome_ argumento;
assinatura_função(tipo_argumento_usado);
};
Tipo_de_retorno nome da classe::nome_da_função()
{
criação_da_função;
}
Classe
class calculadora
{
private:
int num;
public:
int calc_fat(int);
};
int calculadora::calc_fat(int)
{
int i;
for(i = num - 1; i > num; i--)
{
num = num * i;
}
}
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.
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".
Construtores e Destrutores
 Estrutura:
class nome_classe
{
nome_classe(); construtor
~nome_classe(); destrutor
};
nome_classe::nome_classe()
{
inicializações;
}
Nome_classe::nome_classe()
{
}
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”.
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.
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,...
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".
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.
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.

Aula de C e C++

  • 1.
    Autor: Maurício MoreiraNeto Universidade Federal do Ceará - UFC
  • 2.
    Índice  Tópicos paraC: 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  Alinguagem 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 tiposbá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.
  • 8.
  • 9.
    Variáveis importante: Existe trêstipos 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ãovalores 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 barrainvertida  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ídaspadronizadas  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ídaspadronizadas  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ídaspadronizadas  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ídaspadronizadas 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ãousados 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  Realizamcomparaçõ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 controlede 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 controlede 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 controlede 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 controlede 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 controlede 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 controlede 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 controlede 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 controlede 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 controlede 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ãomatrizes 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 dadosN-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  Funcionabasicamente 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 ponteirosguardam 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: Todoponteiro 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 igualardois 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...
  • 35.
    Ponteiros (vetores)  Estrutura: nome_variavel[indice]; ou *(nome_variavel+indice); importante:o nome da variável que foi declarada é na verdade um ponteiro para o tipo da variável da matriz. Pois ele aloca na memória o espaço para a matriz e toma o nome da variável (ponteiro), apontando para o primeiro elemento da matriz.
  • 36.
    Ponteiros (vetores) importante: umponteiro é 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 Fechandoem 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 Fechandoem 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.
  • 39.
    Abrindo e Fechandoem Arquivo  a
  • 40.
    Abrindo e Fechandoem 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.
  • 44.
    Classe  Estrutura: class nome_da_classe { public/private/protected: tipo_argumentonome_ argumento; assinatura_função(tipo_argumento_usado); }; Tipo_de_retorno nome da classe::nome_da_função() { criação_da_função; }
  • 45.
    Classe class calculadora { private: int num; public: intcalc_fat(int); }; int calculadora::calc_fat(int) { int i; for(i = num - 1; i > num; i--) { num = num * i; } }
  • 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".
  • 48.
    Construtores e Destrutores Estrutura: class nome_classe { nome_classe(); construtor ~nome_classe(); destrutor }; nome_classe::nome_classe() { inicializações; } Nome_classe::nome_classe() { }
  • 49.
    Herança  Ela fornecemeios 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: todosos 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  Umclasse 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 emMemó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 emMemó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.