Академический Документы
Профессиональный Документы
Культура Документы
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Introduo Programao em C
Afrnio Melo Junior
afranio@peq.coppe.ufrj.br
Laboratrio de Modelagem, Simulao e Controle de Processos
Programa de Engenharia Qumica, COPPE
Universidade Federal do Rio de Janeiro
06/2015
1 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
1
Conceitos bsicos
Programao
Linguagens de programao
Erros de programao
A linguagem C
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Programao modular
Funes
Escopo
Recursividade
Gerenciamento de memria
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Tipos de dados definidos pelo usurio
structs
unions
2 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Programao
Linguagens de programao
Erros de programao
O que programao?
Definies
Computadores so mquinas projetadas para
realizar operaes aritmticas e lgicas
seguindo uma srie de instrues pr-definidas.
Um conjunto de instrues destinadas a serem
seguidas por um computador conhecido
como programa.
Portanto, a programao pode ser definida
como a arte de se escrever cdigos que contm
instrues para determinadas tarefas a serem
realizadas por um computador.
Figura 1: Computador.
3 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Programao
Linguagens de programao
Erros de programao
Programando
4 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Programao
Linguagens de programao
Erros de programao
Programando
Nvel de abstrao
As primeiras linguagens de programao que surgiram foram as de baixo nvel de
abstrao. Estas apresentam sintaxes relacionadas diretamente s instrues que
devem ser seguidas por um processador (apresentando pouco comprometimento
em relao legibilidade por humanos). Um exemplo a Assembly.
Mais tarde, foram aparecendo linguagens de alto nvel, que tm mais relao com
os objetivos gerais do programador do que com as tarefas especficas do
processador (sendo muito mais prticas, porm menos eficientes). Exemplos so
Fortran, C, Python ou Matlab.
5 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Programao
Linguagens de programao
Erros de programao
Rodando o programa
Linguagens compiladas X Linguagens interpretadas
Imagine que voc escreveu um programa em
alguma linguagem de alto nvel. Como fazer
para rod-lo?
Em primeiro lugar, preciso traduzir o cdigo
da linguagem de programao (que voc
entende) para a linguagem binria (que a
mquina entende). Isto pode ser feito de duas
maneiras:
Compilao: neste caso, traduz-se todo o
programa de uma s vez para o cdigo binrio,
gerando um arquivo chamado executvel. Este
executvel ento pode ser rodado. Exemplos de
linguagens compiladas: C/C++, Fortran.
Interpretao: aqui, o programa traduzido e
executado linha por linha. O desempenho
menor em relao aos programas compilados.
Exemplos de linguagens interpretadas: Python,
Matlab, Octave.
6 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Programao
Linguagens de programao
Erros de programao
Erros de programao
Os famosos bugs!
preciso ter em mente que existem trs tipos
de erros de programao:
Erro de sintaxe: este erro ocorre quando
escrevemos algo que no est definido na
linguagem, ou seja, que o interpretador no
entende. A execuo do programa
interrompida e uma mensagem de erro emitida.
Erro de lgica: este erro aparece quando o
programa funciona, mas no do jeito planejado,
fornecendo resultados esprios (talvez por
alguma frmula errada, etc) . o mais difcil de
ser encontrado.
Erro de estilo: o menos grave de todos, no
sentido de que no prejudica a execuo do
programa. Muitos nem consideram este como
um tipo de erro. Ocorre quando o programador
desenvolve o seu cdigo de maneira bagunada
e ilegvel, o que dificulta sua manuteno,
desenvolvimento e extenso.
7 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
A linguagem C
A Linguagem
O C uma linguagem compilada, de mdio a
alto nvel e de uso geral, inicialmente
desenvolvida por Dennis Ritchie no AT&T Bell
Labs no comeo da dcada de 70.
uma das linguagens mais influentes e bem
sucedidas da histria da computao, tendo
servido como base para o desenvolvimento de
outras linguagens importantes, como C++ e
C#.
Figura 4: Dennis Ritchie.
8 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
9 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
#include <stdio.h>
O programa Hello World!
# include < stdio .h >
int main ()
{
printf ( " Hello World !\ n " ) ;
return 0;
}
10 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
int main ()
11 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
12 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
printf(Hello World!);
O programa Hello World!
# include < stdio .h >
int main ()
{
printf ( " Hello World !\ n " ) ;
return 0;
}
13 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Hello World!
return 0;
O comando return indica o fim da
funo (no caso da main, o fim do
programa) e nele especificado o
valor que esta deve retornar.
O valor 0, retornado pela funo
main, avisa ao sistema operacional
que o programa terminou
normalmente.
14 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Bibliotecas
15 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
O que so variveis?
Variveis
Variveis so pores da memria que armazenam algum valor.
Toda varivel em C precisa ter um identificador (nome que a distingue das outras
variveis) e um tipo (que indica sua natureza).
Tipos de dados
Exemplos de alguns tipos: int (nmero inteiro), float (nmero decimal), double
(decimal com preciso dupla), char (caractere simples), etc.
Cada tipo de dado ocupa um determinado espao na memria. Por exemplo, uma
varivel int ocupa 4 bytes, geralmente.
A linguagem C tambm permite a criao de tipos definidos pelo usurio.
16 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
17 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Declarao X Definio
Declarao de variveis
Antes da utilizao de uma varivel pelo programa, precisamos dizer ao
compilador que ela existe. Isto feito atravs da declarao desta varivel.
A sintaxe para se declarar uma varivel em C : tipo_da_variavel identificador;
Exemplos: int a; float nome; double minha_variavel;
Definio de variveis
Quando declaramos uma varivel, como se estivssemos apenas dizendo ao
compilador: h uma varivel com este tipo, e que tem este nome. Mas ela no
armazena nenhum valor til (apenas lixo de memria).
Para atribuir um valor uma varivel, podemos defini-la.
A definio feita atravs do operador de atribuio (=).
Ex: a = 3; nome = 5.7; minha_variavel = 10.89;
Podemos definir uma varivel ao mesmo tempo em que a declaramos: int a = 4;
Erro comum: tentar definir uma varivel sem t-la declarado.
18 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo (certo)
# include < stdio .h >
// este eh um c o m e n t a r i o . c o m e n t a r i o s sao i g n o r a d o s pelo c o m p i l a d o r
int main ()
{
// d e c l a r a n d o v a r i a v e i s
int a ;
double b ;
int c ;
double d , e ;
// d e f i n i n d o v a r i a v e i s ao mesmo tempo em que d e c l a r a m o s
double f = 1.5; float g = 0.5;
// d e f i n i n d o as v a r i a v e i s d e c l a r a d a s no inicio do codigo
c = 4;
d = e = 2.5;
// o perando com as v a r i a v e i s
a = 3*( c +2) ;
// " a " foi antes declarada , mas nao definida !
b = f *( g *( d + e ) ) ;
// " b " foi antes declarada , mas nao definida !
c = c+a;
// r e d e f i n i n d o " c "
// m o s t r a n d o r e s u l t a d o s na tela
printf ( " \ nOs resultados sao : %d , %f , % d \ n \ n " , a , b , c ) ;
}
19 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo (errado)
20 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Converso de tipos
Type casting
A converso de tipos, mais conhecida pelo nome em ingls type casting, permite
que convertamos dados de um tipo para outro. Ela pode ser explcita ou implcita.
A converso explcita feita com a sintaxe:
(type_name) expression;
Note que o parnteses no comando acima no opcional.
A converso implcita realizada automaticamente pelo compilador quando
algumas operaes com tipos de dados diferentes so realizadas.
21 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Converso de tipos
Converses implcitas
Cuidado com as converses implcitas! Muitas vezes, seu resultado pode no ser
o esperado ou o mais intuitivo.
Regras gerais:
float para int causa truncamento (remoo da parte decimal);
double para float causa arredondamento (remoo de alguns dgitos);
long to int causa remoo de bits em excesso.
22 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
% f \ n " , ( float ) a / b ) ;
24 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
25 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
26 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Constantes
27 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Operadores
28 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Operadores aritmticos
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Operadores relacionais
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Operadores lgicos
31 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Operadores de atribuio
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Comandos
Os comandos mais simples para entrada e sada de dados em C, respectivamente,
so scanf e printf (este ltimo, j apresentado).
Em ambos os comandos, dois recursos so muito utilizados: os especificadores de
formato e os caracteres de escape.
Como ilustrao, podemos analisar a seguinte linha de um dos exemplos dados
anteriormente:
printf("\nOs resultados so: %d, %f, %d \n \n", a, b, c);
No caso, %d e %f so os especificadores de formato para variveis inteiras e de
ponto flutuante, respectivamente, e \n o caractere de escape, que serve para
pular uma linha.
O scanf utilizado de maneira anloga ao printf.
33 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Especificadores de formato
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Caracteres de escape
35 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo - Input/output
36 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Estruturas de controle
Importncia
O corao da arte de se programar encontra-se
nas estruturas de controle.
Digitar uma linha para cada operao feita ou
deciso tomada pelo computador seria
cansativo, concorda?
Atravs das estruturas de controle, podemos
com poucas linhas de cdigo ordenar ao
computador o que ele realmente foi designado
para fazer, ou seja, tarefas repetitivas e
automticas.
Dividem-se em dois tipos.
Estruturas condicionais;
Estruturas iterativas.
37 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Estruturas Condicionais
Expresses lgicas
As estruturas condicionais avaliam expresses lgicas para decidir se executam ou
no algum comando ou conjunto de comandos.
Expresses lgicas, construidas com operadores condicionais e logicos, s podem
resultar em dois valores: verdadeiro ou falso.
A ideia simples: se o resultado da expresso for verdadeiro, o(s) comando(s)
so executado(s). Se for falso, no so executado(s).
As expresses lgicas so construdas de acordo com a lgebra booleana.
38 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Estruturas Condicionais
o bloco if
Executa um ou mais comandos sob determinada condio, representada por uma
expresso lgica. A sintaxe :
if (condicao)
{
lista de comandos;
}
else if (outra condicao)
{
outra lista de comandos;
}
else
{
ultima lista de comandos;
}
Exemplo
Escreva um programa que pea ao usurio um valor de temperatura, em C, e
indique em qual estado fsico, ao nvel do mar, se encontra a gua.
39 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo - if
40 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo - if (cont.)
41 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Estruturas Iterativas
o bloco while
Executa, enquanto uma dada condio permanece satisfeita, um ou mais
comandos. A sintaxe :
while (condicao)
{
lista de comandos;
}
Exemplo
Mostre a lista dos nmeros naturais em tela, desde o 5000, em ordem decrescente.
42 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo - while
43 / 159
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Estruturas Iterativas
o bloco for
Executa, enquanto uma dada condio permanece satisfeita, um ou mais
comandos enquanto um contador percorre valores em passos definidos. A sintaxe
:
for (inicializacao; condicao; passo)
{
lista de comandos;
}
Exemplo
Calcule a soma:
6
X
3i+1
i=1
44 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Hello World!
Bibliotecas
Variveis
Constantes
Operadores
Input/Output bsico
Estruturas de Controle
Exemplo - for
// contador
// valor da soma
45 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Funes
O que uma funo?
Uma funo um grupo de comandos que executado quando chamado de
algum ponto do programa. A sintaxe :
tipo_retornado nome_da_funcao (parametro1, parametro2,...)
{
lista de comandos;
}
Funes so extremamente teis no sentido em que podemos organizar nosso
programa de uma maneira modular, aproveitando-nos assim de todo o potencial
que o paradigma de programao estruturada do C pode nos oferecer.
Chamando as funes
Para chamar as funes no cdigo, devemos usar seu nome, seguido de
parnteses contendo os argumentos que sero passados. Ex: soma (3,5);
Se a funo no tiver argumentos, o parnteses deve ser mantido, mesmo que
vazio! Ex: soma();
46 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Funes
Exemplos
1) Escreva um programa que contenha uma funo que compute a soma de dois
nmeros inteiros. Demonstre o uso da funo.
2) Escreva um programa que resolva a equao x cos(x) = 0 pelo mtodo da
bisseo.
47 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Exemplo 1 - funes
48 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Exemplo 2 - funes
49 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
50 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Escopo
52 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
Escopo
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Funes
Escopo
Recursividade
// f a c t o r i a l c a l c u l a t o r
# include < stdio .h >
long factorial ( long a )
{
if ( a > 1)
return ( a * factorial (a -1) ) ;
else
return 1;
}
int main ()
{
long number = 4;
printf ( " \ n % d ! = % d \ n \ n " , number , factorial ( number ) ) ;
return 0;
}
54 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Ponteiros
Um ponteiro aponta!
Um ponteiro uma varivel que guarda o endereo de outra varivel.
Ponteiros so declarados da mesma maneira que as variveis comuns, porm com
um asterisco (*) precedendo seu nome. Ex: int * ptr;
No caso, ptr um ponteiro que aponta para uma varivel do tipo int, ou seja, ptr
uma varivel que armazena o endereo de uma outra varivel do tipo int.
55 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Operador referncia
56 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
57 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Operador derreferncia
58 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Exemplo 1 - ponteiros
59 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Exemplo 2 - ponteiros
60 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Exemplo 3 - ponteiros
//
//
//
//
//
//
p1 = address of f i r s t v a l u e
p2 = address of s e c o n d v a l u e
value pointed to by p1 = 10
value pointed to by p2 = value pointed by p1
p1 = p2 ( value of pointer is copied )
value pointed by p1 = 20
61 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Aritmtica de ponteiros
Contas com ponteiros
As nicas operaes aritmticas vlidas
para ponteiros so a adio e a subtrao.
Como os ponteiros representam posies
na memria, sua aritmtica respeita o
espao que cada tipo de dado ocupa. Se
declaramos os ponteiros:
char *mychar;
short *myshort;
long *mylong;
e escrevemos:
++ mychar;
++ myshor;
++ mylong;
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Ponteiros constantes
63 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Ponteiros genricos
64 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
65 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Ponteiros indeterminados
66 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Ponteiros nulos
67 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
68 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
69 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
int main ()
{
int x =1 , y =3 , z =7;
duplicate (& x ,& y ,& z ) ;
printf ( " %d , %d , % d " ,x ,y , z ) ;
return 0;
}
70 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
71 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Arrays
72 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Arrays
73 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Arrays
74 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Exemplo - arrays
// arrays example
# include < stdio .h >
int foo [] = {16 , 2 , 77 , 40 , 12071};
int n , result =0;
int main ()
{
for ( n =0 ; n <5 ; ++ n )
{
result += foo [ n ];
}
printf ( " % d " , result ) ;
return 0;
}
75 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Arrays multidimensionais
Construindo matrizes
Um array multidimensional
construdo adicionando-se mais ndices
no momento de sua definio. Por
exemplo, o seguinte comando:
int jimmy [3][5];
cria uma matriz do tipo int 3x5, ou
seja, separa 15 espaos consecutivos na
memria para elementos do tipo int,
identificados com o nome comum
jimmy.
76 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Arrays de caracteres
Armazenando caracteres
Arrays tambm podem armazenar
elementos do tipo char (caracteres).
O comando:
char foo [20];
cria um array (ainda no definido) de
20 caracteres, ou seja, separa 20
espaos consecutivos na memria para
elementos do tipo char, identificados
com o nome comum foo.
77 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Strings
Palavras!
Um string um array de caracteres
cujo ltimo elemento definido o
caractere de escape nulo \0.
78 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Strings
79 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
80 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
81 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Operador offset
O operador [ ], que foi apresentado como sendo um smbolo que especifica a
posio de um elemento em um array, na verdade um tipo de operador
derreferncia, chamado de operador offset.
O que ele faz simples: derreferencia a varivel que o precede, assim como o
operador *, mas adicionando o nmero entre as chaves ao endereo da varivel
derreferenciada.
Por exemplo, os comandos:
a[5] = 0;
*(a+5) = 0;
// a [offset of 5] = 0
// pointed by (a+5) = 0
so equivalentes.
82 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
83 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
return 0;
}
84 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Olha o perigo
Em C, sintaticamente correto exceder o tamanho de um array. Ou seja, se
criarmos um array de 5 elementos e no meio do cdigo tentarmos acessar o
dcimo elemento, o compilador no ir reclamar e o executvel ser gerado
normalmente.
Ou seja, exceder os limites de um array em C no um erro de sintaxe e sim de
lgica.
85 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
86 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Memria dinmica
87 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Memria dinmica
Figura 21: Funes disponveis na biblioteca padro de C para alocao dinmica de memria.
88 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Funo malloc
malloc
A funo malloc aloca um bloco de bytes consecutivos na memria do
computador e retorna o endereo desse bloco, na forma de um ponteiro genrico.
O nmero de bytes alocados especificado no argumento da funo. A sintaxe :
ptr = malloc (tamanho-em-bytes);
Caso queiramos que o ponteiro ptr no seja genrico e sim tenha um tipo
definido, podemos fazer um type casting explcito no momento da declarao:
ptr = (tipo*) malloc (tamanho-em-bytes);
Exemplo:
ptr = (int*) malloc (100*sizeof(int));
Nesse caso, a funo malloc aloca um espao na memria correspondente a 100
variveis do tipo int e retorna um ponteiro que aponta para o endereo do
primeiro byte.
Note o uso da funo sizeof, que garante a portabilidade do cdigo.
89 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Funo calloc
calloc
A funo calloc parecida com a malloc. A diferena que esta aloca um bloco
simples de memria, enquanto aquela aloca blocos contguos, todos de mesmo
tamanho, e os inicializa como zero. A sintaxe :
ptr = (tipo*) calloc (no-de-elementos, tamanho-em-bytes-por-elemento);
Exemplo:
ptr = (float*) calloc (25, sizeof(float));
91 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Funo free
free
Para liberar o espao alocado pelas funes malloc ou calloc, precisamos usar a
funo free, cuja sintaxe bem simples:
free (ptr);
sendo ptr o endereo da memria que se deseja desalocar.
93 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Ponteiros
Passagem de argumentos por valor ou referncia
Arrays
Memria dinmica
Funo realloc
realloc
Se o tamanho da memria alocada for insuficiente, podemos usar o comando
realloc para realocar a memria. A sintaxe bem simples:
ptr = realloc (ptr,newsize);
94 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
Estruturas
Uma estrutura de dados, ou mais simplesmente struct, um tipo de dado, criado
pelo usurio, que contm vrios elementos agrupados sob um mesmo nome. Os
elementos, chamados de membros, podem ter diferentes tipos ou comprimentos.
A sintaxe para a declarao :
struct nome
{
tipo_do_membro1 nome_do_membro1;
tipo_do_membro2 nome_do_membro2;
tipo_do_membro3 nome_do_membro3;
.
.
.
} nomes_dos_objetos;
95 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
Estruturas
A utilidade das estruturas fica clara ao analisarmos um exemplo concreto:
struct product
{
int weight;
double price;
} apple, banana, melon;
Os trs objetos tambm poderiam ser declarados aps a declarao do struct, em
qualquer ponto do cdigo, maneira tradicional de declarao de variveis:
struct product apple;
struct product banana, melon;
96 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
Estruturas
importante diferenciarmos entre um struct (que representa um tipo de dado,
definido pelo usurio) e um objeto dessa struct (ou seja, uma varivel que tem
como tipo a struct).
No caso anterior, o novo tipo criado foi a struct product e os trs objetos
(variveis cujos tipos so struct) foram apple, banana e melon. Note que
podemos criar quantos objetos quisermos do tipo product.
97 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
Estruturas
Aps criada a struct e seus objetos, podemos operar com os membros de cada
objeto utilizando o operador ponto. Ex:
apple.weight
apple.price
banana.weight
banana.price
melon.weight
melon.price
Note que cada objeto tem seu prprio conjunto de membros.
98 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs - exemplo
struct database {
int id_number ;
int age ;
float salary ;
};
int main ()
{
struct database employee ;
99 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs - exemplo 2
# include < stdio .h >
# include < string .h >
struct Books
{
char title [50];
char author [50];
char subject [100];
int
book_id ;
};
/* f u n c t i on d e c l a r a t i o n */
void printBook ( struct Books book ) ;
int main ( )
{
struct Books Book1 ;
struct Books Book2 ;
/* book 1 s p e c i f i c a t i o n */
strcpy ( Book1 . title , " C Programming " ) ;
strcpy ( Book1 . author , " Nuha Ali " ) ;
strcpy ( Book1 . subject , " C Programming Tutorial " ) ;
Book1 . book_id = 6495407;
100 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
/* book 2 s p e c i f i c a t i o n */
strcpy ( Book2 . title , " Telecom Billing " ) ;
strcpy ( Book2 . author , " Zara Ali " ) ;
strcpy ( Book2 . subject , " Telecom Billing Tutorial " ) ;
Book2 . book_id = 6495700;
/* print Book1 info */
printBook ( Book1 ) ;
/* Print Book2 info */
printBook ( Book2 ) ;
return 0;
}
void printBook ( struct Books book )
{
printf ( " Book title : % s \ n " , book . title ) ;
printf ( " Book author : % s \ n " , book . author ) ;
printf ( " Book subject : % s \ n " , book . subject ) ;
printf ( " Book book_id : % d \ n \ n " , book . book_id ) ;
}
101 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs - exemplo 3
// array of s t r u c t u r e s
# include < stdio .h >
# include < stdlib .h >
struct movies_t {
char title [20];
int year ;
};
void printmovie ( struct movies_t movie ) ;
int main ()
{
int i , n ;
struct movies_t * films ;
printf ( " Enter the number of movies : " ) ;
scanf ( " % d " , & n ) ;
films = ( struct movies_t *) malloc ( n * sizeof ( struct movies_t ) ) ;
102 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
103 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
104 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
105 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
structs
106 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions
107 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions
108 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions
109 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions - exemplo 1
110 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions - exemplo 2
# include < stdio .h >
# include < string .h >
union Data
{
int i ;
float f ;
char str [20];
};
int main ( )
{
union Data data ;
data . i = 10;
data . f = 220.5;
strcpy ( data . str , " C Programming " ) ;
printf ( " data . i : % d \ n " , data . i ) ;
printf ( " data . f : % f \ n " , data . f ) ;
printf ( " data . str : % s \ n " , data . str ) ;
return 0;
}
111 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
unions - exemplo 3
# include < stdio .h >
# include < string .h >
union Data
{
int i ;
float f ;
char str [20];
};
int main ( )
{
union Data data ;
data . i = 10;
printf ( " data . i : % d \ n " , data . i ) ;
data . f = 220.5;
printf ( " data . f : % f \ n " , data . f ) ;
strcpy ( data . str , " C Programming " ) ;
printf ( " data . str : % s \ n " , data . str ) ;
return 0;
}
112 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
enumerations
Constantes nomeadas
Um enumeration um tipo que consiste de um conjunto de constantes inteiras,
cada uma com um nome.
A sintaxe para criar um enumeration familiar:
enum nome
{
nome_do_membro1;
nome_do_membro2;
nome_do_membro3;
.
.
.
} nomes_dos_objetos;
113 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
enumerations
Constantes nomeadas
Note que, na declarao de um enumeration, no usamos nenhum outro tipo
pr-definido. Portanto, um enumeration pode ser visto como um tipo criado do
zero, totalmente novo.
A cada membro de um enumeration est associado um inteiro constante. Por
default, ao primeiro membro est associado 0, ao segundo membro 1, e assim
sucessivamente. Mas o programador pode mudar essa configurao. Ex:
enum clubes
{
vasco=0;
flamengo=10;
};
114 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
enumerations - exemplo
115 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
structs
unions
enumerations
typdefs
typedefs
116 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
A linguagem C++
A Linguagem
O C++ uma extenso da linguagem C,
desenvolvida por Bjarne Stroustrup com o
objetivo de incorporar nesta o paradigma de
programao orientada a objetos.
117 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
A linguagem C++
entre outras.
Para mais diferenas, consulte:
http://www.cprogramming.com/tutorial/c-vs-c++.html
118 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
A linguagem C++
119 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
120 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
121 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Especificadores de acesso
So trs os especificadores de acesso que podemos usar:
private: membros privados so acessveis apenas por membros da mesma classe ou por
seus amigos.
protected: membros protegidos so acessveis por membros da mesma classe, por seus
amigos ou por membros de classes derivadas.
public: membros pblicos so acessveis de qualquer lugar do cdigo em que o objeto
seja visvel.
122 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Exemplo
Observe o seguinte exemplo:
class Rectangle
{
int x,y;
public:
void set_values (int,int);
int area (void);
} rect;
Declaramos uma classe chamada Rectangle, com dois membros privados (x e y) e
dois membros pblicos (set_values e area), e criamos um objeto (rect) dessa
classe.
O processo de criar um objeto (varivel) de uma classe (tipo) chama-se instanciar
a classe.
123 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes - exemplo 1
// classes example
# include < iostream >
using n a m e s p a c e std ;
class Rectangle {
int width , height ;
public :
void set_values ( int , int ) ;
int area () { return width * height ;}
};
void Rectangle :: set_values ( int x , int y ) {
width = x ;
height = y ;
}
int main () {
Rectangle rect1 , rect2 ;
rect1 . set_values (3 ,4) ;
rect2 . set_values (5 ,8) ;
cout << " area 1: " << rect1 . area () << endl ;
cout << " area 2: " << rect2 . area () << endl ;
}
124 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Operador de escopo
No exemplo anterior, ao definirmos a funo membro set_values fora da classe a
qual ela pertencia (Rectangle), foi preciso preceder seu nome pelo nome da classe
e o operador :: (chamado operador de escopo). Ou seja, foi preciso escrever
Retangle::set_values no lugar onde estaria normalmente apenas set_values, o
nome da funo.
Isso sempre necessrio quando definimos membros de classe fora do corpo da
classe em si.
125 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes - exemplo 2
# include < iostream >
using n a m e s p a c e std ;
class temp
{
private :
int data1 ;
float data2 ;
public :
void int_data ( int d )
{
data1 = d ;
cout < < " Number : " << data1 ;
}
float float_data ()
{
cout < < " \ nEnter data : " ;
cin > > data2 ;
return data2 ;
}
};
int main ()
{
temp obj1 , obj2 ;
obj1 . int_data (12) ;
cout < < " You entered " << obj2 . float_data () ;
}
126 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes - exemplo 2
127 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Construtor
No nosso primeiro exemplo, criamos uma funo chamada set_values que servia
para inicializar os membros de um dado objeto.
Na verdade, o C++ possui uma funo especial, o construtor, que tem
justamente esse objetivo: inicializar os membros de um objeto. O construtor
chamado automaticamente toda vez que um novo objeto de uma classe
declarado.
O construtor uma funo cujo nome o mesmo nome da classe, que no
retorna nenhum tipo (nem mesmo void) e pode aceitar argumentos normalmente.
128 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Construtor
Quando definimos um construtor para uma classe, todos os objetos dessa classe
tm que ser declarados de acordo com a sintaxe do construtor (ou seja, com o
mesmo nmero de argumentos especificado no construtor).
Se no definimos um construtor para uma classe, o compilador assume que a
classe possui um construtor padro (sem argumentos). Sendo assim, podemos
declarar os objetos dessa classe da mesma maneira que definimos variveis
comuns (sem argumentos).
Tambm podemos nos prevenir para o caso do objeto ser declarado sem
argumentos, mesmo quando seu construtor os exige: definimos para isso, no
parnteses do prprio construtor, valores-padro para as variveis a serem
inicializadas.
130 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes - exemplo 4
# include < iostream >
using n a m e s p a c e std ;
class Box
{
public :
// C o n s t r u c t o r d e f i n i t i o n
Box ( double l =2.0 , double b =2.0 , double h =2.0)
{
cout <<" Constructor called . " << endl ;
length = l ;
breadth = b ;
height = h ;
}
double Volume ()
{
return length * breadth * height ;
}
private :
double length ;
// Length of a box
double breadth ;
// Breadth of a box
double height ;
// Height of a box
};
131 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
// Declare box1
// Declare box2
// Declare box3
// Declare pointer to a class .
132 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
133 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes - exemplo 5
# include < iostream >
using n a m e s p a c e std ;
class Circle {
double radius ;
public :
Circle ( double r ) : radius ( r ) { }
double area () { return radius * radius *3.14159265;}
};
class Cylinder {
Circle base ;
double height ;
public :
Cylinder ( double r , double h ) : base ( r ) , height ( h ) {}
double volume () { return base . area () * height ;}
};
int main () {
Cylinder foo (10 ,20) ;
cout << " foo s volume : " << foo . volume () << \ n ;
return 0;
}
134 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
135 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Classes
Composio
A relao entre classes conhecida como composio, ou relao has-a, ocorre
quando uma instncia de uma dada classe membro de outra.
J vimos isso no nosso ltimo exemplo: uma instncia (objeto) da classe Circle
era membro da classe Cylinder.
136 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Amizade
137 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Square sqr (4) ;
rect . convert ( sqr ) ;
cout << rect . area () ;
return 0;
}
140 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Herana
141 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Herana
142 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Herana - exemplo
// derived classes
# include < iostream >
using n a m e s p a c e std ;
class Polygon {
protected :
int width , height ;
public :
void set_values ( int a , int b )
{ width = a ; height = b ;}
};
class Rectangle : public Polygon {
public :
int area ()
{ return width * height ; }
};
class Triangle : public Polygon {
public :
int area ()
{ return width * height / 2; }
};
143 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Triangle trgl ;
rect . set_values (4 ,5) ;
trgl . set_values (4 ,5) ;
cout << rect . area () << \ n ;
cout << trgl . area () << \ n ;
return 0;
}
144 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
145 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Polimorfismo
Vrias formas
Uma das principais caractersticas da herana
entre classes que um ponteiro para uma
classe derivada compatvel em tipo com um
ponteiro para a classe me.
O polimorfismo a arte de tirar vantagem
dessa situao.
Com o polimorfismo, podemos programar
utilizando ponteiros que apontam para classes
base genricas, que so substitudas, a nvel
apropriado, por classes derivadas especficas.
146 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Polimorfismo - exemplo
// p o i n t e rs to base class
# include < iostream >
using n a m e s p a c e std ;
class Polygon {
protected :
int width , height ;
public :
void set_values ( int a , int b )
{ width = a ; height = b ; }
};
class Rectangle : public Polygon {
public :
int area ()
{ return width * height ; }
};
class Triangle : public Polygon {
public :
int area ()
{ return width * height /2; }
};
147 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Triangle trgl ;
Polygon * ppoly1 = & rect ;
Polygon * ppoly2 = & trgl ;
ppoly1 - > set_values (4 ,5) ;
ppoly2 - > set_values (4 ,5) ;
cout << rect . area () << \ n ;
cout << trgl . area () << \ n ;
return 0;
}
148 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Polimorfismo
Membros virtuais
Um membro virtual uma funo membro que pode ser redefinida nas classes
derivadas, preservando as propriedades polimrficas (chamada da funo atravs
de ponteiros).
Uma funo virtual tem sua declarao precedida pela palavra-chave virtual.
importante ter em mente que funes membro no virtuais tambm podem ser
redefinidas nas classes derivadas, porm no podem ser mais acessadas atravs de
referncias para a classe-me (ou seja, perdem suas propriedades polimrficas).
Uma classe que declara ou herda uma funo virtual chamada de classe
polimrfica.
149 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
150 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Triangle trgl ;
Polygon poly ;
Polygon * ppoly1 = & rect ;
Polygon * ppoly2 = & trgl ;
Polygon * ppoly3 = & poly ;
ppoly1 - > set_values (4 ,5) ;
ppoly2 - > set_values (4 ,5) ;
ppoly3 - > set_values (4 ,5) ;
cout << ppoly1 - > area () << \ n ;
cout << ppoly2 - > area () << \ n ;
cout << ppoly3 - > area () << \ n ;
return 0;
}
151 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Polimorfismo
Classes abstratas
Classes abstratas so classes que contm pelo menos uma funo puramente
virtual.
Uma funo puramente virtual uma funo sem implementao. A sintaxe para
sua declarao :
virtual tipo nome () = 0;
As implementaes para as funes puramente virtuais vm apenas nas classes
derivadas.
Classes abstratas no podem ser instanciadas. No h objetos cujos tipos sejam
classes abstratas. Elas apenas fornecem a base a partir da qual outras classes
sero derivadas.
As classes abstratas, apesar de no poderem ser instanciadas, no so inteis!
Podemos programar fazendo referncias a elas, tirando proveito de todo o poder
do polimorfismo.
152 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
153 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Triangle trgl ;
Polygon * ppoly1 = & rect ;
Polygon * ppoly2 = & trgl ;
ppoly1 - > set_values (4 ,5) ;
ppoly2 - > set_values (4 ,5) ;
cout << ppoly1 - > area () << \ n ;
cout << ppoly2 - > area () << \ n ;
return 0;
}
154 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
int main () {
Rectangle rect ;
Triangle trgl ;
Polygon * ppoly1 = & rect ;
Polygon * ppoly2 = & trgl ;
ppoly1 - > set_values (4 ,5) ;
ppoly2 - > set_values (4 ,5) ;
ppoly1 - > printarea () ;
ppoly2 - > printarea () ;
return 0;
}
156 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
A linguagem C++
Classes
Composio
Amizade
Herana
Polimorfismo
Figura 30: Diagrama UML de um programa bsico para clculo de equilbrio de fases.
157 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Bibliografia
158 / 159
Conceitos bsicos
A linguagem C
Programao modular
Gerenciamento de memria
Tipos de dados definidos pelo usurio
Programao orientada a objetos: o C++
Obrigado!
159 / 159