Upload
vuongduong
View
220
Download
0
Embed Size (px)
Citation preview
Aula passada...
• Complexidade dos sistemas de soDware • Estrutura • Decomposição • Abstração • Hierarquia • Projeto de sistemas complexos
2
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
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
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
Do C ao C++
6
Do C ao C++
7
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
Pré-‐processador C
• #if #else #endif – #ifdef – #ifndef – Compilação condicional
9
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
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
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
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
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
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
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; !}!
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; !}!
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
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);!}!
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
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;!}!
Tipos definidos em C
• enum – Mapeamento de valores em instruções switch
• structs • typedef
22
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
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;!}!
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
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;!}!
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
Do C ao C++
• Funções de alocação de memória em C – malloc – calloc – realloc – free
• C++ – new – delete
28
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
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
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
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
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