Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Capitulo 1 Introdução ao C++ C++ - Superconjunto do C O C++ aceita a sintaxe C, acrescentando melhoramentos, ampliando o escopo de aplicações, e possibilitando o desenvolvimento de programas baseados no paradigma da Orientação a Objetos; O C++ mantém à característica do C de ser uma linguagem de pequeno tamanho, o C++ possui apenas 62 palavras reservadas (32 delas comuns ao C); A diferença maior se dá na unidade de programação: no C são as funções enquanto que no C++ são as classes (que instanciam objetos e contém funções) C++ C Palavras reservadas : auto continue enum if short switch volatile break default extern int signed typedef while asm delete inline private template typeid bool dynamic_cast mutable protected this typename case do float long sizeof union char double for register static unsigned const else goto return struct void catch class explicit false namespace new reinterpret_cast public throw true using virtual const_cast friend operator static_cast try wchar_t Estrutura de um programa C++ Estrutura básica de um programa C++ #include <...> using namespace ... ; tipo main() { comandos; } Estrutura de um programa C++ Exemplo de um programa C++ Arquivo cabeçalho Namespace // primeiro.cpp #include <iostream> Comentário using std::cout; // ou - using namespace std; int main() { cout << “Meu Primeiro Programa em C++”; return 0; } Cout é um objeto que exibe a informações na saída-padrão Encerra função main e retorna 0 Arquivos cabeçalho Contêm protótipos de funções, definições de macros, declarações de tipos de estrutura, de classes e de constantes São processados em fase anterior a compilação chamado pré-processamento Formato Significado #include <xxx> xxx procurado no diretório padrão de arquivos-cabeçalho #include “xxx” xxx procurado no diretório corrente e se não encontrado no diretório padrão de arquivos-cabeçalho Namespaces Namespace – faz parte do que se chama Ambiente de Nomes no C++, que é um mecanismo para expressar agrupamentos lógicos # include <iostream> using namespace std; int main { int idade; cout << “Digite a sua idade”; cin >> idade; Exemplo: cout << “Voce tem ” << idade calc1::calcular(valor1); e calc2::calcular(valor2) << “anos ” << “\n”; return 0; Namespace std Estão definidos os vários elementos como por exemplo os objetos cin e cout } Etapas para criação de um programa A partir do programa fonte (arquivo .cpp) são necessárias duas etapas para tornar-se um programa executável: Compilação: compilador traduzir o programa-fonte em linguagem de máquina. Resulta um programa-objeto (.o) Link-edição: linker liga o programa-objeto, código-objeto de funções utilizadas e rotinas-padrão de inicialização. Resulta no programa executável Etapas para criação de um programa Programa fonte Compilador Código objeto de funções Programa objeto Linker Programa executável Rotinas-padrão Capitulo 2 Elementos da linguagem Identificadores São nomes atribuídos pelo programador a variáveis, funções, classes, etc. Regras: Conter caracteres alfabéticos minusculo/maiusculo, numericos ou _ (sublinhado) O primeiro caractere deve ser alfabetico ou _ (sublinhado) Não há limite de comprimento Valor correto valor@ incorreto Saldo Conta incorreto delete incorreto 2nota incorreto Variáveis Refere-se a uma posição de memória onde um valor é armazenado, com possibilidade de ser alterado durante execução de um programa Deve ter um nome Tem um determinado comprimento em bits conforme seu tipo Declaração de Variável Declaração e inicialização: igual ao C; Nomes de variáveis: igual ao C; Locais de declaração: inovação; pode-se declarar uma variável no momento do seu uso for (int i = 0; i < 20; i++) {...} Case sensitivity Escopo: igual ao C; Permite variáveis homônimas (mesmo nome, mas escopo diferente) int j = 0; exemplo() { int x, j; ... for (int i=0;...) j = 5; // refere-se ao j local ... } Operador de Resolução de Escopo (::) #include <iostream> O C++ diferencia variáveis local e global homônimas com o Operador de Resolução de Escopo :: (também chamado Qualificação de Escopo), que colocado em frente à variável, faz com que o programa acesse a global. Um erro será apontado, caso não exista a variável global. using namespace std; int x = 2; int dob (int v); int main () { int x = 0; cout << “local = “<< dob( x ); cout << “global = ”<< dob(::x); return 0; } int dob (int v) { return 2*v; } -.-.-.-.-.-.-.-.-.-.-. Resultado : local = 0 global = 4 Tipos do C++ Tipo Lógico Caracter Inteiro Real String Nome Tamanho bool char, unsigned char int, unsigned (unsigned int), short (short int), long (long int), unsigned long float, double, long double void string 1 1 2a4 Tipos Nativos 4 a 10 - Classe definida <string.h> em biblioteca Tipos do C Tipo Nome caracter positivo inteiro positivo char unsigned char int (signed) unsigned int (unsigned) short int (short) long int (long) unsigned long float double long double pequeno grande grande positivo real grande Bytes 8 1 8 1 16/32 2/4 16/32 2/4 Bits Faixa -128 a 127 0 a 255 16 2 -32768 a 32767 32 32 32 64 80 4 4 4 8 10 -2.14*10 9 a 2.14*10 9 0 a 4.29* 10 9 3.4 e -38 a 3.4 e 38 1.7 e -308 a 1.7 e 308 3.4 e - 4932 a 1.1 e 4932 Tamanhos char ‘a’ bool 1 short 756 int 100000000 int* &c1 double char[12] 1234567e34 Alô, mundo! \0 Constantes inteiras C++ trata constantes inteiras como int a não ser que haja motivos para não o fazer. Há dois motivos O valor é muito grande Utilização de um sufixo que indique um tipo específico Exemplos: cout << 10; // trata o valor 10 como um int cout << 20L; // trata o valor 20 como um long int cout << 30LL; // trata o 30 como long long int Constantes ponto flutuante C++ trata ponto-flutuante como double a não ser que haja um sufixo indicando para não o fazer Exemplo: cout << 2.32F; cout << 2.3E3F; count << 3.423L; // trata o valor 2.32 como float // trata o valor 2.3E3 como float // trata o valor 3.423 como long double; Constantes simbólicas Constantes identificadas por um nome ex.: const int limite =10 int vetor [limite]; Erro de overflow Limite das variáveis Quando valor ultrapassa tamanho do tipo o valor é truncado Exemplo dos 40.000 que viraram 32.767 Programa não é interrompido Um erro “silencioso” é criado Erros no programa todo Operadores Operadores determinam as operações básicas que podem ser executadas nos valores. Levam em consideração os tipos das variáveis. Em torno de 40 operadores. Precedência dos operadores. Há diversos tipos de operadores: Atribuição Atribuição Reduzida Aritméticos Lógicos Condicionais Bit a bit Incremento e Decremento … Precedência e Associatividade Diversos operadores podem ser utilizados na mesma expressão. A ordem de execução dos operadores pode ser determinada explicitamente pelo uso de parêntesis. Quando não são usados parêntesis, o compilador usa regras de precedência para determinar qual operação executar primeiro. Se duas operações têm a mesma precedência, executa de acordo com regra de associatividade (normalmente da esquerda para a direita). Precedência e Associatividade Maior precedência ( ) [ ] -> ! ~ ++ -- . -(unário) (cast) *(unário) &(unário) sizeof * / % + << >> <<= >>= == != & ^ | && || ? = += -= *= /= Menor precedência , Exemplos a d e f g f a = = = = = = = b + c; /* Atribuição tem menor precedência que soma */ (a + b) * c; /* Determinada pelos parêntesis */ a + b * c; /* * tem maior precedência que + */ a + b – c; /* (a + b) – c */ f/e*g; /* (f/e)*g */ a + b * c – d / e; /* (a + (b*c)) – (d/e) */ b = c = d = 0; /* (a = (b = (c = (d = 0)))) */ Typecast Recurso que permite forçar a conversãod e um tipo em outro, de modo explicito Pode ser feito antes ou após uma operação Exemplo: char letra = ‘z’; cout << “O codigo ASCII da letra “ << letra “ eh: ”; cout << int(letra) << endl; Saida: O cdigo ASCII da letra Z eh 122