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

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

Embed Size (px)

Citation preview

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

+

Curso de C/C++

Aula 6

Instrutor: Luiz Felipe Sotero

Material por: Allan Lima

http://allanlima.wordpress.com/

Page 2: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

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

Page 3: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Roteiro

História da linguagem C++

Diferenças entre C e C++

Declaração de Classes

Ponteiros para Classes

Page 4: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+O Surgimento de 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 1997Bjarne Stroustrup

Page 5: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

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

+Comparativo entre C e C++

C C++Estruturada Orientada a Objetos

malloc e calloc new

free delete

Passagem por valor Passagem por valor ou referência

stdio iostream

Variáveis declaradas no início de um bloco

Variáveis declaradas em qualquer parte do bloco

Page 7: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Comparativo entre C e C++

C 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

Page 8: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplos

hello.cpp

comparativo.cpp

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

+Modelando um Retângulo em C

struct Retangulo {

int altura;

int largura;

};

int area(struct Retangulo *r) {

return r->altura * r->largura;

}

int perimetro(struct Retangulo *r) {

return 2 * (r->largura + r->altura);

}

Page 10: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Orientação a Objetos

Objeto Retângulo

Largura: 10 Altura: 5

Área Perímetro Métodos

Atributos

Analogia:

Page 11: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Orientação a Objetos

Objetos são tipos definidos pelo usuário

Eles podem ter:

Atributos - são as informações que um objeto guarda

Métodos - são as funções que determinam o seu comportamento

Page 12: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

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

Page 13: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+ Modelando um Retângulo em C++

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

Page 14: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Diferença entre Classe e Objeto

Classe é apenas a descrição de um tipo de objeto (“receita do bolo”)

Objetos são as instâncias de uma classe (“bolos feitos com a receita”)

Objeto retângulo2

Largura: 13 Altura: 115

Área Perímetro

Classe Retângulo

Largura Altura

Área Perímetro

Objeto retângulo1

Largura: 10 Altura: 5

Área Perímetro

Uma classe,

vários objetos

Page 15: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

classeprotected

Podem ser acessados apenas por membros da própria classe ou das suas sub-classes

Page 16: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplo

class Retangulo {

int largura;

private:

int altura;

public:

int area() {

return

largura * altura;

}

protected:

int perimetro() {

return 2 *

(largura + altura);

}

};

// Exemplo de acesso:int main() { Retangulo r; // Errado: r.altura = 10; // Errado: r.largura = 40; // OK: int a = r.area(); // Errado: a = r.perimetro();}

Obs.: Por default todo membro de uma classe é considerado private

Page 17: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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 inlineIsto torna o executável mais rápidoMas deixa o executável bem maiorSó é bom para métodos muito curtos

Qual a solução?Utilizar o operador ::

Page 18: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

Page 19: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplo

class Retangulo {

private:

int largura;

int altura;

public:

int area();

int perimetro();

};

// força o método a ser inline

int inline Retangulo::area() {

return largura * altura;

}

int Retangulo::perimetro() {

return 2 *(largura + altura);

}

Page 20: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Métodos get e set

get() Serve para se ter acesso aos atributos encapsulados de

uma classe Exemplo:

int getLargura() { return largura; }

set() Útil para permitir a modificação dos atributos da classe

encapsulados Exemplo:void setLargura(int l) { largura = l;}

Page 21: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplo

class Retangulo {

private:

int largura;

int altura;

public:

int getAltura() { return altura;}

protected:

void setAltura(int a) {

// evita um valor inválido

if (a > 0) altura = a;

}

};

Page 22: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

Page 23: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

Page 24: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

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

}

Page 25: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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 uma região de memória alocada previamente Exemplo:

delete r; delete[] array;

Page 26: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Erros Comuns

// ...

Retangulo r = new Retangulo(10, 15);

// Errado: r não é um ponteiro!!!

delete r;

// Errado: r não é um ponteiro!!!

// ...

Page 27: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Classe e 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

Page 28: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplo

struct Retangulo {

int getAltura() {// public por default

return altura;

}

void setAltura(int a) { // public por default

if (a > 0) altura = a;

}

private:

int largura;

int altura;

};

Page 29: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+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

Page 30: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exemplos

Retangulo.h

Retangulo.cpp

main.cpp

Page 31: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Exercícios

1) Crie um classe chamada Ponto: Seus atributos são as suas coordenadas x e y Implemente um construtor que recebe estes dois parâmetros Defina os métodos gets inline e os sets normalmente Escreva um método chamado equals que recebe um outro ponto como

argumento retornando true se as coordenadas de ambos forem iguais e false caso contrário.

Implemente um método chamado distancia que recebe um outro ponto como argumento e calcula a distância entre os dois

2) Implemente uma classe chamada Circulo Seus atributos são o ponto que determina o seu centro e o tamanho do raio Defina um construtor que recebe estes dois argumentos Defina os métodos gets e set inline Implemente um método chamado equals que recebe um outro círculo como

argumento retornado true se as coordenadas e o raio de ambos forem iguais e false caso contrário.

Escreva um método chamado área que calcula a área do círculo Crie um método chamado perimetro que calcula o perímetro do círculo

Page 32: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Referências

Slides da cadeira de Introdução à Programação do CIn:

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 ([email protected]) do Curso de C/C++

Page 33: + Curso de C/C++ Aula 6 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

+Agradecimentos

Allan Lima, Breno do Vale e Francisco Magalhães

Pelo material cedido para o curso