Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Advertisements

... para pessoas que não sabem c++
Centro Integrado de Tecnologia da Informação
Augusto NevesJoão CarlosRodrigo Paula Linguagem de Programação C++ Componentes do Grupo.
Programação Orientada aos Objectos Paulo Marques Departamento de Eng. Informática Universidade de Coimbra Out/2005 Core C++: Uma abordagem.
Linguagem de Programação C++
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Matrizes clássicas e vectores em C++
Modularização: funções e procedimentos (continuação)
Aula 8 Polimorfismo.
UNIVERSIDADE ESTADUAL PAULISTA Júlio de Mesquita Filho Faculdade de Filosofia e Ciências – Campus de Marília Universidade Aberta à Terceira Idade Curso.
Algoritmos e linguagens de programação 1 (aula 05)
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Revisão /*======================================================*/
+ Java Web XIV Jornada de Cursos. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Informática e Computação Estrutura de Repetição aula 13
Exercício 1 Faça um programa que receba como entrada o nome e o salário de um funcionário de uma empresa e que calcule o novo valor do salário do.
Aula 07.
Aula 04.
Aula 05.
Construção de Algoritmos AULA 03
Linguagem de Programação II
Seminário 1: Revisão de C
VETORES Roteiro da aula Referência ao Programa: Estrutura de Dados
Linguagem de programação
+ Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
+ Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
+ Curso de C/C++ Aula 10 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Programação em C++ Compiladores
Procedural vs. OO (Figuras Geométricas: Área do triângulo)
Informática e Computação Estrutura de Repetição aula 12
Centro Educacional Pioneiro
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 07) Prof. Alessandro Bernardo.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 03) Prof. Alessandro Bernardo.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Malu Novo Apresenta Malu Novo Apresenta Maré baixa maré cheia... Maré baixa maré cheia...
Maysa Apresenta Contrato Escolha? Acaso? Destino? Não sabemos...
FELIZ ANIVERSÁRIO Rondel Karla Michelle No céus há muita graça e alegria Bailam no ar lírios multicores.
Malubarni Apresenta Morrer de Amor Morrer de amor Junto ao teu calor.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
Maysa Apresenta O Grito pede Socorro O grito é uma voz que ecoa... Das montanhas pede socorro... É uma voz sumida...
VETORES AULA 01 Roteiro da aula Referência ao Programa: Estrutura de Dados.  Variáveis Compostas homogenias   Objetivo: apresentar VETOR.
Professor Maurício Maia
KARLLA E ELIANE CASSEMIRO APRESENTAM POBRE CORAÇÃO!
Juli Apresenta Ah! AMOR Imortal! Que nos invade e arrebata De forma única...sem igual... Que mexe com a gente... Fazendo da magia poesia...
Maysa Barbedo Apresenta Querido Tango... Que chora tanto!
Helena Luna Apresenta Helena Luna Apresenta Mulher.
Sou de Você E. Book Formatação S ☼ LuNaMaRoSa Textos:
Smile Sorria Ainda que seu coração esteja doendo.
INE5408 Estruturas de Dados Gerência de Arquivos -Propriedades de Árvores k-D.
Neusa Staut Apresenta Transição de Slides Automática.
APRESENTAÇÃO JORNAL NA ESCOLA Prefeitura Municipal de Cabo Frio Secretaria Municipal de Educação Departamento de Formação Continuada Centro de Estudos.
Ponteiros Parte III.
Transcrição da apresentação:

Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero Material por: Allan Lima http://allanlima.wordpress.com/

copiar, distribuir, exibir e executar a obra criar obras derivadas Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições: Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Veja aqui a licença completa

Roteiro Namespaces Exceções Casts O operador typeid Entrada e Saída

namespaces namespace nomeDoNamespace { corpoDoNamespace } Um namespace é um mecanismo para expressar um agrupamento lógico Sintaxe: namespace nomeDoNamespace { corpoDoNamespace }

namespaces Podemos utilizar um namespace para agrupar diversas funções, classes, variáveis .... Por exemplo, se tivermos muitas funções para realização de operações matemáticas podemos criar um namespace para todas

Exemplo exemploNamespace.h

namespaces Usando o operador :: Através do comando using namespace Podemos acessar os membros de um namespace de duas maneiras diferentes: Usando o operador :: Através do comando using namespace

Exemplo #include <iostream> #include "exemploNamespace.h" using namespace Mat; int main() { std::cout << maximo(10, 56) << std::endl; std::cout << minimo(10, 56) << std::endl; std::cout << PI << std::endl; NumeroComplexo c; BigInteger b; return 0; }

namespaces exemploNamespaceFuncoes.cpp using namespace podem ser utilizados quando tivermos mais de uma função com o mesmo protótipo. Exemplo: exemploNamespaceFuncoes.cpp

Exceções throw nomeDaExceção; Como podemos descobrir quando um erro ocorre no nosso programa? Podemos utilizar o conceito de exceção Exceções são erros que ocorrem em tempo de execução Lançando uma exceção: throw nomeDaExceção;

Exceções try { // comandos } catch (TipoDaExceção) { Tratando uma exceção: try { // comandos } catch (TipoDaExceção) { // código executado quando ocorre uma exceção } Obs.: Com o comando throw podemos lançar qualquer coisa. E com o catch podemos tratar qualquer coisa que foi lançada.

Exceções C++ permite o uso de try-catch’s aninhados Também permite o uso de vários catch’s para um único try Quando queremos tratar uma exceção qualquer podemos fazer catch (...)

Exemplos exemploExcecoes1.cpp exemploExcecoes2.cpp

Exceções A biblioteca padrão de C++ contém um conjunto de exceções predefinido Estas exceções herdam da classe std::exception que foi definida no header <exception>

Exceções Exceções da Biblioteca Padrão de C++

Exemplo class A { virtual void a() {}; }; int main() { try { A *a = NULL; typeid(*a); } catch (std::exception &e) { cout << e.what() << endl; } return 0;

Exercícios void debitar(float valor); void creditar(float valor); Crie um namespace chamado banco e dentro dele declare uma classe chamada Conta com os atributos saldo e número com os seguintes métodos: void debitar(float valor); void creditar(float valor); Crie também uma exceção chamada SaldoInsuficienteException que será lançada pelo método debitar.

Cast O operador de cast tradicional pode ser aplicado de forma indiscriminada para fazer conversões entre tipos Exemplo: exemploCast.cpp

Cast static_cast <novoTipo> (expressão) Em C++ o cast no estilo antigo é obsoleto (deprecated) Em compensação C++ possui novos operadores de cast: static_cast <novoTipo> (expressão) const_cast <novoTipo> (expressão) reinterpret_cast <novoTipo> (expressão) dynamic_cast <novoTipo> (expressão) Com eles podemos obter os mesmos resultados do estilo antigo, porém de forma mais segura

static_cast exemploStaticCast.cpp Realiza casts mais seguros e portáveis em comparação com o método antigo. Verifica se algumas conversões de tipos são compatíveis Pode ser utilizado para realizar conversões entre ponteiros e tipos básicos Exemplo: exemploStaticCast.cpp

const_cast Constante  Variável Utilizado para as conversões: Constante  Variável Variável volátil  Variável não volátil Exemplo: exemploConstCast.cpp

reinterpret_cast Ponteiro  Ponteiro Inteiro  Ponteiro Utilizado para as conversões: Ponteiro  Ponteiro Inteiro  Ponteiro Não faz qualquer verificação de tipo É o mais perigoso dos operadores de cast Exemplo: exemploReinterpretCast.cpp

dynamic_cast Se não for retorna NULL exemploDynamicCast.cpp Utilizado para a conversão entre ponteiros e referências para objetos Verifica se a operação é válida em tempo de execução. Se não for retorna NULL Exemplo: exemploDynamicCast.cpp

Violando o encapsulamento Podemos usar o reinterpret_cast para violar o encapsulamento dos atributos de uma classe É só criar uma classe com os mesmos atributos da classe original, mas com o modificador de acesso public Exemplo: exemploEncapsulamento.cpp

typeid type_info typeid(variavel); É utilizado para saber informações sobre os tipos Sintaxe: type_info typeid(variavel); A classe type_info possui o método name() que retorna o nome do tipo A classe type_info também sobrecarrega os operadores == e != Para poder utilizar a classe type_info precisamos incluir o header <typeinfo>

Exemplo exemploTypeid.cpp

E/S Padrão C++ possui uma biblioteca de E/S chamada iostream Esta possui alguns dispositivos predefinidos: Nome Tipo Buffered Descrição cin istream Sim Entrada padrão (normalmente o teclado) cout ostream Saída Padrão (normalmente o monitor) clog Saída de erro padrão (normalmente o monitor) cerr Não

O tipo ostream cout << “UFPE\n”; //endl = a quebra de linha É um tipo de saída de dados Podemos enviar dados para objetos deste tipo através do operador << (operador de inserção) O operador << pode ser utilizado mais de uma vez na mesma sentença e não adiciona um ‘\n’ no final da linha Exemplos: cout << “UFPE\n”; //endl = a quebra de linha cerr << “CIn” << endl; clog << “C++” << “\n”;

O tipo istream int a; float b; cin >> a >> b; É um tipo de entrada de dados Podemos ler dados de objetos deste tipo através do operador >> O operador >> também pode ser utilizado mais de uma vez na mesma sentença A leitura só é realizada até um ‘\r’, ‘\n’ ou ‘ ’ Exemplo: int a; float b; cin >> a >> b;

E/S com Arquivos Principais classes: ifstream – Utilizada para leitura de dados de arquivos ofstream – Utilizada para gravação de dados de arquivos fstream – Utilizada para ambos leitura e gravação de dados de arquivos Para utilizar esta classe devemos incluir o arquivo fstream.h

E/S com Arquivos void open(const char *nomeArquivo, Exemplo: Abrindo um arquivo: void open(const char *nomeArquivo, openMode modo); Exemplo: fstream myStream(); myStream.open(“meuArquivo”, ios::in); Fechando um arquivo: void close(); myStream.close(); Este método é chamado no destrutor das classes ifstream, ofsteam e fstream

E/S com Arquivos Modos de Abertura: Modo Descrição ios::in Abre um arquivo para leitura ios::out Abre um arquivo para escrita ios::app Abre um arquivo apenas para adicionar dados ao seu final ios::ate Abre um arquivo existente e move o cursor para o final do arquivo ios::trunc Se o arquivo existir ele será sobrescrito ios::binary Abre o arquivo em modo binário Os modos acima podem ser combinadas com o operador ‘|’

E/S com Arquivos Modos de abertura padrão das classes: Classe Modo ofstream ios::out | ios::trunc ifstream ios::in fstream ios::in | ios::out

E/S com Arquivos ofstream arq(“meuAquivo”, ios::out|ios::app); Podemos abrir um arquivo sem usar o método open: ofstream arq(“meuAquivo”, ios::out|ios::app); Método is_open() indica se o arquivo esta aberto Método eof() indica se o arquivo chegou ao seu fim Função getline() Lê uma linha do arquivo

E/S com Arquivos void write(char *buffer, void read(char *buffer, Podemos utilizar os operadores >> e << para ler e escrever em arquivos respectivamente Para manipulação de arquivos binários existem os métodos: void write(char *buffer, streamsize tamanho); void read(char *buffer,

Exemplo exemploArquivo.cpp

Exercícios Crie um programa que abre e conta o número de caracteres de um arquivo de texto, este número deverá ser mostrado na tela. Além disso, o usuário deverá entrar com o caminho do arquivo e se este não existir uma exceção deverá ser lançada. Crie um programa chamado mycopy que recebe como argumento, na sua função main, dois caminhos para arquivos de texto e copia todo o conteúdo do primeiro para segundo. O programa também deverá imprimir no monitor o número total de linhas copiadas.

Referências http://www.nexsun.com.br/techzone.html Stroustrup, Bjarne. The C++ Programming Language, Special Edition Eckel, Bruce. Thinking in C++, 2nd ed. Volume 1 TechZone http://www.nexsun.com.br/techzone.html Slides de Gustavo (ghcp@cin.ufpe.br) do curso de C/C++

Agradecimentos Pelo material cedido para o curso Allan Lima, Breno do Vale e Francisco Magalhães Pelo material cedido para o curso