Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br
Complexidade dos sistemas de software Estrutura Decomposição Abstração Hierarquia Projeto de sistemas complexos Aula passada... 2
Do C ao C++ A Linguagem C++ C++ e POO C++ versus Java Sintaxe básica C++ Principais IDE e ferramentas A Linguagem C++ 3
C Linguagem de programação imperativa 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 Do C ao C++ 4
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 Multithreading, melhor suporte a mapas de caracteres unicode etc. Do C ao C++ 5
Do C ao C++ 6
Do C ao C++ 7
#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 Pré-processador C 8
#if #else #endif #ifdef #ifndef Compilação condicional Pré-processador C 9
void O tipo 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 Tipos fundamentais em C 10
C89 não possuía tipo boolean Convenção baseada em inteiros era utilizada Tipos caracteres char um byte Define-se com aspas simples: a, \n, \x45 São na verdade valores inteiros (signed ou unsigned) Tipos fundamentais em C 11
Array Memória consecutiva, elementos do mesmo tipo, 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) Arrayse ponteiros em C 12
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 Arrayse ponteiros em C 13
Ponteiros Um ponteiro é um endereço Em C pode-se manipular-se tanto o ponteiro quanto o elemento apontado Aritmética de ponteiros Para dois tipos diferentes X e Y, X* e Y* são diferentes Ponteiro genérico void* Ponteiro nulo NULL Arrayse ponteiros em C 14
Strings em C Uma string é um array de caracteres (tipo 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 Arrayse ponteiros em C 15
#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; } Arrayse ponteiros em C 16
#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; } Arrayse ponteiros em C 17
Struct Agregam campos de tipos diferentes em um novo tipo composto Memória consecutiva 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 Estruturas e uniões em C 18
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 19
Estruturas em C são o ponto de partida para os mecanismos de abstração em C++ Definição de tipos 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) Estruturas e uniões em C 20
#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; Estruturas e uniões em C 21
enum Mapeamento de valores em instruções switch structs typedef Tipos definidos em C 22
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 Do C ao C++ 23
#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++ 24
Funções Não é permitido 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 printf(const char*...) C++ Sobrecarga de funções Argumentos padrão Do C ao C++ 25
#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++ 26
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 Do C ao C++ 27
Funções de alocação de memória em C malloc calloc realloc free C++ new delete Do C ao C++ 28
C++ inclui C With minor exceptions, C++ is a superset of C (meaning C89).Well-written C programs tend to be C++ programs as well. (The C++ Programming Language) Compatibilidade C/C++ 29
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 Compatibilidade C/C++ 30
Ponteiro para void Em C podem ser associados a ponteiros de qualquer tipo, em C++ não Static e Casts Semântica diferente em C++ Compatibilidade C/C++ 31
Notas de aula Prof. Kurt Nørmark (Aalborg University) http://people.cs.aau.dk/~normark/ap/from-cto-cpp.html TIOBE http://www.tiobe.com Referências 32
Motivaçã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++ Próxima aula 33
Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br