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

Apresentações semelhantes


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

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

2 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

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

4 namespaces namespace nomeDoNamespace { corpoDoNamespace }
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 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

8 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; }

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

10 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;

11 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.

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 <exception>

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 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.

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

19 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

20 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

21 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

22 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

23 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

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

26 Exemplo exemploTypeid.cpp

27 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

28 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”;

29 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;

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

32 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 ‘|’

33 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

34 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

35 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,

36 Exemplo exemploArquivo.cpp

37 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.

38 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 Slides de Gustavo do curso de C/C++

39 Agradecimentos Pelo material cedido para o curso
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"

Apresentações semelhantes


Anúncios Google