Curso de C/C++ Avançado

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Centro Integrado de Tecnologia da Informação
Paulo Marques Hernâni Pedroso
Herança, Polimorfismo e Classes Abstratas em Java
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Alocação Dinâmica de Memória
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
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
Classes e objetos P. O. O. Prof. Grace.
Programação Orientada a Objetos com Java
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
+ 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
Tópicos avançados em internet A
Linguagem de Programação II
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Aula 3 CoL, atividade Polimorfismo (late binding) Modificador final Modificador abstract Interfaces Herança múltipla Atribuição, Construtores, Destrutores,
Programação I Aula 2 (Métodos)
+ 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
Tipos Abstratos de Dados
Classes, Objetos, Atributos e Métodos JAVA
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
+ Curso de C/C++ Aula 10 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Linguagens de Programação II
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Técnicas de Desenvolvimento de Programas
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Orientação a Objetos: herança Professor: Sandro Rigo.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Aula prática 14 Orientação a Objetos – C++ Parte 2
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
Estruturas de Dados Aula 17: Estruturas Genéricas
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Prof. Gilberto Irajá Müller
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Aula Prática 4 Monitoria IP/CC (~if669).
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Herança e Polimorfismos
Programação I Aula 1 Prof. Gilberto Irajá Müller Última atualização 2/3/2009.
Linguagem I Strings.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Construtores e Destrutores
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
Prof. Marcos LABORATÓRIO DE PRÁTICA DE PROGRAMAÇÃO 06.
Módulo II Capítulo 1: Orientação a Objetos
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Felipe Nunes Flores – Programa de Educação Tutorial.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Curso de C/C++ Avançado Aula 6 – Introdução ao C++ Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com 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 Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Roteiro História da linguagem C++ Diferenças entre C e C++ Declaração de Classes Ponteiros para classes Herança Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com O Surgimento do C++ Criada no Bell Labs em 1983 Por Bjarne Stroustrup Possui a performance de C E as funcionalidades de outras linguagens como Simula e Algol Padronizada apenas em 1997 Bjarne Stroustrup Allan Lima – http://allanlima.wordpress.com

Comparativo entre C e C++ Foi criada para ser C++ é uma extensão de C Mas não é 100% compatível com C C++ C Allan Lima – http://allanlima.wordpress.com

Comparativo entre C e C++ Estruturada Orientada a Objetos malloc e calloc new free delete Passagem por valor Passagem por referência stdio iostream Variáveis declarada no início de um bloco Variáveis declaradas em qualquer parte do bloco Allan Lima – http://allanlima.wordpress.com

Comparativo entre C e C++ Inteiro como valor booleano Tipo bool Duas funções não podem ter o mesmo nome Duas funções não podem ter o mesmo protótipo Argumentos são sempre necessários Valor defaut para os argumentos Casts simples Novos tipos de cast String como array de caracteres Tipo string Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplos hello.cpp comparativo.cpp Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classes São definições a partir das quais os objetos podem ser criados As classes determinam quais são os atributos e métodos de um objeto Sintaxe: class nomeDaClasse { corpoDaClasse; } listaDeObjetos; Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo class Retangulo { int largura; int altura; int area() { return largura * altura; } int perimetro() { return 2 *(largura + altura); } ret1; // declara uma variável do tipo Retangulo Allan Lima – http://allanlima.wordpress.com

Categorias de permissão Membros de uma classe podem ser: public Podem ser acessados em qualquer lugar private Só podem ser acessados pelos membros da própria classe protected Podem ser acessados apenas por membros da própria classe ou das suas sub-classes Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo class Retangulo { int largura; private: int altura; public: int area() { return largura * altura; } protected: int perimetro() { return 2 *(largura + altura); }; Obs.: Por default todo membro de uma classe é considerado private // Exemplo de acesso: int main() { Retangulo r; r.altura = 10; // Errado r.largura = 40; // Errado int a = r.area(); a = r.perimetro(); // Errado } Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classes Quando implementamos um método dentro de uma classe o compilador copia e cola o código toda vez que o método é chamado! O método é dito inline Isto torna o executável mais rápido Mas deixa o executável bem maior Só é bom para métodos muito curtos Qual a solução? Utilizar o operador :: Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com O Operador :: Permite a implementação de métodos fora da classe A classe passa a possuir apenas o protótipo do método O corpo pode ficar no mesmo arquivo ou em outro Sintaxe: nomeDaClasse::nomeDoMembro Também podemos usar o modificador inline para que mesmo assim o método seja inline Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo class Retangulo { private: int largura; int altura; public: int area(); int perimetro(); }; int inline Retangulo::area() { // força o método a ser inline return largura * altura; } int Retangulo::perimetro() { return 2 *(largura + altura); Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Construtor É um método especial que é chamado quando criamos um novo objeto Deve possuir o mesmo nome da classe Não possui retorno É utilizado para inicializar os atributos da classe Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Destrutor Método especial que é chamado automaticamente quando um objeto está prestes a ser apagado da memória Deve ter o mesmo nome da classe mas precedido por um ~ Assim como o construtor ele não possui retorno Além disso, ele não pode ter parâmetros Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo class Retangulo { private: int largura; int altura; public: Retangulo(int a, int l); ~Retangulo() { } // destrutor padrão } Retangulo::Retangulo(int a, int l) { altura = a; largura = l; }; Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Alocação de Memória new Aloca memória para um objeto Retorna um ponteiro para a posição alocada Exemplo: Retangulo *r = new Retangulo(10, 15); Retangulo *array = new Retangulo[10]; delete Libera um região de memória alocada previamente delete r; delete[] array; Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Erros Comuns // ... Retangulo r = new Retangulo(10, 15); // Errado: r não é um ponteiro!!! delete r; // Errado: r não é um ponteiro!!! Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Estruturas C++ permite a criação de estruturas com métodos Estas são praticamente idênticas às classes Porém todos os seu membros são public por default Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo struct Retangulo { int getAltura() { return altura; }; // public por default void setAltura(int a) { // public por default if (a > 0) altura = a; } private: int largura; int altura; }; Allan Lima – http://allanlima.wordpress.com

Modularizando o seu programa Quando queremos criar um projeto com diversas classes fazemos uso de algumas convenções: Criamos um arquivo “.h” só com a definição da classe e os métodos inline E um arquivo “.cpp” só com a implementação dos seus métodos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplos Retangulo.h Retangulo.cpp main.cpp Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Herança É um mecanismo utilizado para permitir o reuso de código Quando uma classe B herda de uma outra classe A dizemos que B é uma sub-classe de A Em C++ todos os membros public e protected da classe base são herdados Construtores, Destrutores, o operador = e os friends não são herdados Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Herança Sintaxe class nomeDaClasse : tipoDaHeranca classeBase struct nomeDaClasse : tipoDaHeranca classeBase tipoDaHeranca: public – Os membros public e protected da classe base são por default public e protected respectivamente private – Os membros public e protected da classe base são por default private protected – Os membros public e protected da classe por default são protected Se tipoDaHeranca não for especificado, private é assumido para as classes e public para as estruturas Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Herança Apesar dos construtores e destrutores não serem herdados, quando criamos um objeto ele chama o construtor padrão de sua classe base e também o destrutor padrão quando ele está prestes a ser desalocado da memória Também podemos re-utilizar o código do construtor da classe base: construtorClasse(parametros) : construtorDaSuperClasse(parametros) { ... } Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Ponteiros e Herança Podemos criar ponteiros para classes A inicialização é feita através do operador new ou do & Quando usarmos o new também temos que usar o delete para liberar memória Restrições: Um ponteiro para uma classe base só pode chamar métodos desta Mas podemos usar casts para ter acesso aos demais métodos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo exemploHeranca.cpp Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Herança Múltipla C++ permite que uma classe herde de várias outras Sintaxe: class nomeDaClasse : tipoHeranca classeBase1, // ... tipoHeranca classeBaseN Mas isso traz problemas: A e B possuem o método m C herda de A e de B O que acontece quando chamamos m de C? Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exemplo exemploHerancaMultipla.cpp Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Dicas Importantes Sempre crie um construtor vazio para sua classe Sempre utilize herança pública, a menos que tenha um bom motivo para fazer o contrário Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Exercícios 1)Implemente a seguinte hierarquia de classes: Temporario Empregado Secretaria SecretariaTemp Gerente Consultor Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classe Empregado Atributos: Nome E-mail Celular Salário Departamento Métodos gets e sets Construtor com os seu atributos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classe Gerente Atributos Os empregados que gerenciam O número empregados que gerencia Métodos Gets e sets Construtor com os seus atributos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classe Secretaria Atributos O empregado do qual é secretaria Métodos Gets e sets Construtor com os seus atributos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Classe Temporario Atributos A data de início do contrato O número de meses do contrato Métodos Gets e Sets Construtor com os seus atributos Allan Lima – http://allanlima.wordpress.com

SecretariaTemporaria Métodos: Construtor com os seu atributos Allan Lima – http://allanlima.wordpress.com

Allan Lima – http://allanlima.wordpress.com Referências Slides da cadeira de Introdução à Programação: http://www.cin.ufpe.br/~phmb/ip Arnaut: Oficina de Programação http://www.arnaut.eti.br/op/index.html Programação orientada a objectos em PHP http://www.tutoriaismania.com.br/imprime.php?id=396 Slides de Gustavo (ghpc@cin.ufpe.br) do Curso de C/C++ Allan Lima – http://allanlima.wordpress.com