34
Linguagem de Programação I Carlos Eduardo Ba6sta Centro de Informá6ca UFPB [email protected]

Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Embed Size (px)

Citation preview

Page 1: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Linguagem  de  Programação  I  

Carlos  Eduardo  Ba6sta    

Centro  de  Informá6ca  -­‐  UFPB  [email protected]  

Page 2: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Aula  passada...  

•  Complexidade  dos  sistemas  de  soDware  •  Estrutura  •  Decomposição  •  Abstração  •  Hierarquia  •  Projeto  de  sistemas  complexos  

2  

Page 3: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

A  Linguagem  C++    

•  Do  C  ao  C++  •  A  Linguagem  C++    •  C++  e  POO  •  C++  versus  Java  •  Sintaxe  básica  C++  •  Principais  IDE  e  ferramentas  

3  

Page 4: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

•  C  – Linguagem  de  programação  impera6va  – Matrizes,  estruturas,  ponteiros,  estruturas  de  controle...  

– Concisa,  de  baixo  nível  e  permissiva  •  C:  Código  eficiente  (ciente  dos  recursos)  – Geração  de  código  de  máquina  – Sem  máquina  virtual  (sandbox)  

•  Pré-­‐processador    

4  

Page 5: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  •  C  Tradicional  ou  Original  – Antes  da  padronização  –  The  C  Programming  Language  (Kernighan  &  Ritchie)  

•  C89  –  ANSI  C  – Ainda  a  versão  mais  difundida  

•  C99  – Desenvolvida  em  paralelo  com  C++  

•  C11  – Mul6threading,  melhor  suporte  a  mapas  de  caracteres  unicode  etc.  

5  

Page 6: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

6  

Page 7: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

7  

Page 8: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Pré-­‐processador  C  •  #include  – #include  <stdio.h>  – #include  “myfile.h”  –  Inclusão  de  arquivos  de  cabeçalho  

•  #define  – #define  PI  3.14159  – #define  produto(x,y)  ((x)*(y))  – Constantes  simbólicas  e  abstrações  para  funções  

8  

Page 9: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Pré-­‐processador  C  

•  #if  #else  #endif  – #ifdef  – #ifndef  – Compilação  condicional  

9  

Page 10: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Tipos  fundamentais  em  C  

•  void  – O  6po  do  “não-­‐valor”  – Usado  para  designação  de  parâemtro  nulo  

•  funcao(void)  – Usado  para  definição  de  ponteiros  genéricos  

•  void*  •  Tipos  inteiros  –  int,  long  e  short,  signed  e  unsigned  

•  Tipos  reais  –  float  e  double  

10  

Page 11: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Tipos  fundamentais  em  C  

•  C89  não  possuía  6po  boolean  – Convenção  baseada  em  inteiros  era  u6lizada  

•  Tipos  caracteres  – char  –  um  byte    •  Define-­‐se  com  aspas  simples:  ‘a’,  ‘\n’,  ‘\x45’  

– São  na  verdade  valores  inteiros  (signed  ou  unsigned)  

11  

Page 12: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

•  Array  – Memória  consecu6va,  elementos  do  mesmo  6po,  alocação  de  tamanho  fixo  (tamanho  conhecido  pelo  compilador)  

– Compilador  traduz  a  notação  de  array  para  notação  de  ponteiro  

–  Indexação  baseada  em  0    – Não  há  verificação  de  alocação  (extensão  do  array)  

12  

Page 13: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

•  Limitações  do  array  – Não  há  atribuição  direta  – Array  não  pode  ser  passado  por  valor  – Array  não  pode  ser  retornado  por  valor  

13  

Page 14: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

•  Ponteiros  – Um  ponteiro  é  um  endereço  – Em  C  pode-­‐se  manipular-­‐se  tanto  o  ponteiro  quanto  o  elemento  apontado  •  Aritmé6ca  de  ponteiros  

– Para  dois  6pos  diferentes  X  e  Y  ,  X*  e  Y*  são  diferentes  

– Ponteiro  genérico  –  void*  – Ponteiro  nulo  –  NULL  

14  

Page 15: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

•  Strings  em  C  – Uma  string  é  um  array  de  caracteres  (6po  char),  mutável  e  delimitada  por  um  caractere  especial  ‘\0’  

– Tipo:  char[]  ou  char*  – Um  valor  literal  é  denotado  através  do  uso  de  aspas  duplas  –  “valor  literal”  

– Biblioteca  C  padrão  –  string.h  

15  

Page 16: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

16  

#include <stdio.h>!#include <stdlib.h>!!int main(void) {! double a[] = {1.0, 2.0, 3.0, 4.0, 5.0}, sum = 0.0;! int i; !! a[1] = 2.2;! for (i = 0; i < 5; i++) sum += a[i];! printf("Sum = %f\n", sum); /* 15.2 */ ! ! return 0; !}!

Page 17: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Arrays  e  ponteiros  em  C  

17  

#include <stdio.h>!#include <stdlib.h> !int main(void) {! double *a=(double*)malloc(5*sizeof(double)), sum = 0.0; ! int i, j, k; ! if (a == NULL){ ! printf("Erro de alocacao\n");! exit(EXIT_FAILURE); ! } ! for (i = 0; i < 5; i++) *(a+i) = (double)(i + 1);! *(a+1) = 2.2; /* a[1] = 2.2 */! for (i = 0; i < 5; i++) sum += *(a+i);! printf("Sum = %f\n", sum); /* 15.2 */! free(a);! return 0; !}!

Page 18: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Estruturas  e  uniões  em  C  •  Struct  – Agregam  campos  de  6pos  diferentes  em  um  novo  6po  composto  

– Memória  consecu6va  –  Seleção  direta  de  componente  

•  estrutura1.campo  –  Seleção  indireta  via  ponteiro  para  estrutura  

•  pt_estrutura1-­‐>campo  

•  União  –  Todos  os  campos  ocupam  a  mesma  memória  – Maneira  de  se  especializar  uma  estrutura  em  diferentes  direções  

18  

Page 19: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Estruturas  e  uniões  em  C  

19  

typedef struct{! char road[15];! int roadNumber;! char town[20];! } address; !!typedef struct{! int idNumber;! char firstName[10],! lastName[20];! address location;} person; !!void print_person(const person p){! printf("%s %s\n%s %-4d\n%s\n\n",! p.firstName, p.lastName,! p.location.road, p.location.roadNumber,! p.location.town);!}!

Page 20: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Estruturas  e  uniões  em  C  

•  Estruturas  em  C  são  o  ponto  de  par6da  para  os  mecanismos  de  abstração  em  C++  

•  Definição  de  6pos  x  definição  de  classes  •  Ponteiros  para  funções  •  Duas  operações  com  funções  possíveis  – Chamada  da  função  – Captura  do  endereço  para  a  função  (ponteiro)  

20  

Page 21: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Estruturas  e  uniões  em  C  

21  

#include <stdio.h>!void (*f)(char *, int);!!void fun1(char *s, int i){! printf("fun1: %s, %d\n", s, i);!}!void fun2(char *s, int i){! printf("fun2: %s, %d\n", s, i);!}!int main(void) {! int cond;!! printf("Condicao (0, 1): ");! scanf(" %d", &cond);! if (cond)! f = &fun1;! else! f = &fun2;! (*f)("AP", 8);! return 0;!}!

Page 22: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Tipos  definidos  em  C  

•  enum  – Mapeamento  de  valores  em  instruções  switch  

•  structs  •  typedef  

22  

Page 23: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

•  Operadores  –  C++  (re)define  3  operadores  

•  .    •  -­‐>  •  ::  (escopo)  

•  Estruturas  de  controle    –  C  =  C++  

•  If,  if-­‐else,  switch,  while...  –  C++  -­‐  no  laço  for  pode-­‐se  declarar  variáveis  locais  na  inilização  •  C89  (ANSI  C)  não  

23  

Page 24: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

24  

#include <iostream>!!using namespace std;!!int main(){!! int i = 55, j = 77;!! cout << i << " " << j << endl << endl;!! for(int j = 10, i = 0; i < 5; i++, j++){! cout << i << " " << j << endl;! }! cout << endl;!! cout << i << " " << j << endl << endl;!}!

Page 25: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  •  Funções  –  Não  é  permi6do  o  aninhamento  de  funções  em  ANSI  C  –  Parâmetros  são  passados  por  valor  

•  Ponteiros  são  passados  como  valor    

– Mecanismo  para  definição  de  número  arbitrário  de  parâmetros  •  prin~(const  char*  ...)  

•  C++  –  Sobrecarga  de  funções  –  Argumentos  padrão  

25  

Page 26: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

26  

#include <stdio.h>!!double swap_doubles_ptr(double *d1, double *d2){! double temp;! temp = *d1;! *d1 = *d2;! *d2 = temp;!}!!int main(void) {! double e, f;!! e = 5.0, f = 7.0;! printf("%f %f\n", e, f); // 5.0 7.0! swap_doubles_ptr(&e, &f); ! printf("%f %f\n", e, f); // 7.0 5.0! ! return 0;!}!

Page 27: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

•  Organização  de  programas  em  C  – Cabeçalhos  (.h)  e  arquivos  de  código  (.c)  –  Inclusão  textual  via  #include  

•  Organização  lógica  de  C++  segue  a  de  C,  com  escopo  diferenciado  através  do  suporte  a  namespaces    

27  

Page 28: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Do  C  ao  C++  

•  Funções  de  alocação  de  memória  em  C  – malloc  – calloc    –  realloc  –  free  

•  C++  – new  – delete  

28  

Page 29: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Compa6bilidade  C/C++  

•  C++  inclui  C    •  With  minor  excep=ons,  C++  is  a  superset  of  C  (meaning  C89).Well-­‐wriHen  C  programs  tend  to  be  C++  programs  as  well.  (The  C++  Programming  Language)  

29  

Page 30: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Compa6bilidade  C/C++  

•  Comentários  //  – Não  suportados  em  ANSI  C  (C89)  – C++  e  C99  suportam  

•  Funções  sem  argumentos  – Em  C  pode,  em  C++  não  

•  Estruturas  inline  como  retorno  ou  parâmetro  – Em  C  pode,  em  C++  não  

•  Enum  – Em  C  o  valor  pode  ser  associado  a  um  inteiro,  em  C++  não  

30  

Page 31: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Compa6bilidade  C/C++  

•  Ponteiro  para  void  – Em  C  podem  ser  associados  a  ponteiros  de  qualquer  6po,  em  C++  não  

•  Sta6c  e  Casts  – Semân6ca  diferente  em  C++  

31  

Page 32: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Referências  

•  Notas  de  aula  Prof.  Kurt  Nørmark  (Aalborg  University)  – h�p://people.cs.aau.dk/~normark/ap/from-­‐c-­‐to-­‐cpp.html  

•  TIOBE  – h�p://www.6obe.com  

32  

Page 33: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Próxima  aula  

•  Mo6vação  para  o  uso  de  C++  para  o  aprendizado  de  POO  

•  Quando  usar  C  e  quando  usar  C++  •  C++  versus  Java  •  Sintaxe  básica  de  C++  •  Ambientes  de  desenvolvimento  C++  

33  

Page 34: Linguagem)de) Programação)I - wiki.cbatista.netwiki.cbatista.net/lib/exe/fetch.php/lpi-aula02-alinguagemcpp_pt1.pdf · Estruturas)e)uniões)em)C) • Struct) – Agregam)campos)de)6pos)diferentes)em)um)novo)

Linguagem  de  Programação  I  

Carlos  Eduardo  Ba6sta    

Centro  de  Informá6ca  -­‐  UFPB  [email protected]