A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

+ Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

Apresentações semelhantes


Apresentação em tema: "+ Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero Material por: Allan Lima"— Transcrição da apresentação:

1 + Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

2 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

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

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

5 + 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

6 + Exemplo exemploNamespace.h

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

8 + Exemplo #include #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; }

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

10 + Exceções 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;

11 + Exceções 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.

12 + 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 (...)

13 + Exemplos exemploExcecoes1.cpp exemploExcecoes2.cpp

14 + 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

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

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

17 + Exercícios 1) 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.

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

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

20 + static_cast 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

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

22 + reinterpret_cast 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

23 + dynamic_cast 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

24 + 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

25 + typeid É 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

26 + Exemplo exemploTypeid.cpp

27 + E/S Padrão C++ possui uma biblioteca de E/S chamada iostream Esta possui alguns dispositivos predefinidos: NomeTipoBufferedDescrição cinistream SimEntrada padrão (normalmente o teclado) coutostream SimSaída Padrão (normalmente o monitor) clogostream SimSaída de erro padrão (normalmente o monitor) cerrostream NãoSaída de erro padrão (normalmente o monitor)

28 + O tipo ostream É 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 ” ;

29 + O tipo istream É 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;

30 + 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

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

32 + E/S com Arquivos Modos de Abertura: ModoDescriçã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 ‘|’

33 + E/S com Arquivos Modos de abertura padrão das classes: ClasseModo ofstreamios::out | ios::trunc ifstreamios::in fstreamios::in | ios::out

34 + E/S com Arquivos 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

35 + E/S com Arquivos 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, streamsize tamanho);

36 + Exemplo exemploArquivo.cpp

37 + Exercícios 2) 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. 3) 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.

38 + Referências Stroustrup, Bjarne. The C++ Programming Language, Special Edition Eckel, Bruce. Thinking in C++, 2nd ed. Volume 1 TechZone Slides de Gustavo do curso de C/C++

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


Carregar ppt "+ Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero Material por: Allan Lima"

Apresentações semelhantes


Anúncios Google