Aula04

128 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
128
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aula04

  1. 1. Introdu¸˜o ca Templates Operators Conclus˜o a Palestra: Templates e sobrecarga de operadores Lucas Lellis Rodrigo Torres PESL - Programa de Educa¸˜o em Software livre ca Universidade Federal de S˜o Paulo a 18 de Outubro de 2013 Lucas Lellis e Rodrigo Torres Templates e Operators
  2. 2. Introdu¸˜o ca Templates Operators Conclus˜o a 1 Introdu¸˜o ca 2 Templates Introdu¸˜o ca Fun¸˜es Template co Classes Template 3 4 Operators Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Conclus˜o a O que vem pela frente? Lucas Lellis e Rodrigo Torres Templates e Operators
  3. 3. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Hoje vamos falar sobre dois conceitos poderosos: Lucas Lellis e Rodrigo Torres Templates e Operators
  4. 4. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Hoje vamos falar sobre dois conceitos poderosos: Uma poderosa ferramenta para a programa¸˜o gen´rica, que ca e s˜o os Templates. a Lucas Lellis e Rodrigo Torres Templates e Operators
  5. 5. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Hoje vamos falar sobre dois conceitos poderosos: Uma poderosa ferramenta para a programa¸˜o gen´rica, que ca e s˜o os Templates. a Uma t´cnica de abstra¸˜o muito interessante, que ´ a e ca e sobrecarga de operadores. Lucas Lellis e Rodrigo Torres Templates e Operators
  6. 6. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Templates O Template , ou ”Gabarito”, foi criado com uma motiva¸˜o ca clara, a possibilidade de criar containers como Vector, list e map, funcionarem independentemente do tipo de classe. Lucas Lellis e Rodrigo Torres Templates e Operators
  7. 7. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Templates O Template , ou ”Gabarito”, foi criado com uma motiva¸˜o ca clara, a possibilidade de criar containers como Vector, list e map, funcionarem independentemente do tipo de classe. Com o tempo, esse recurso se mostrou um grande suporte para a programa¸˜o gen´rica ca e Lucas Lellis e Rodrigo Torres Templates e Operators
  8. 8. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Templates O Template , ou ”Gabarito”, foi criado com uma motiva¸˜o ca clara, a possibilidade de criar containers como Vector, list e map, funcionarem independentemente do tipo de classe. Com o tempo, esse recurso se mostrou um grande suporte para a programa¸˜o gen´rica ca e Com ele ´ poss´ usar um tipo como uma parˆmetro na e ıvel a defini¸˜o de uma classe ou de uma fun¸˜o ca ca Lucas Lellis e Rodrigo Torres Templates e Operators
  9. 9. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Templates O Template , ou ”Gabarito”, foi criado com uma motiva¸˜o ca clara, a possibilidade de criar containers como Vector, list e map, funcionarem independentemente do tipo de classe. Com o tempo, esse recurso se mostrou um grande suporte para a programa¸˜o gen´rica ca e Com ele ´ poss´ usar um tipo como uma parˆmetro na e ıvel a defini¸˜o de uma classe ou de uma fun¸˜o ca ca ”Tipo” n˜o se refere somente aos tipos b´sicos do C/C++, a a uma vez que tamb´m ´ poss´ usar qualquer classe como e e ıvel parˆmetro. a Lucas Lellis e Rodrigo Torres Templates e Operators
  10. 10. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Templates O Template , ou ”Gabarito”, foi criado com uma motiva¸˜o ca clara, a possibilidade de criar containers como Vector, list e map, funcionarem independentemente do tipo de classe. Com o tempo, esse recurso se mostrou um grande suporte para a programa¸˜o gen´rica ca e Com ele ´ poss´ usar um tipo como uma parˆmetro na e ıvel a defini¸˜o de uma classe ou de uma fun¸˜o ca ca ”Tipo” n˜o se refere somente aos tipos b´sicos do C/C++, a a uma vez que tamb´m ´ poss´ usar qualquer classe como e e ıvel parˆmetro. a Podemos usar um tipo de classe como um parˆmetro de a entrada e definir um nome para ele, e assim, us´-lo a normalmente dentro de uma fun¸˜o ou classe ca Lucas Lellis e Rodrigo Torres Templates e Operators
  11. 11. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template A partir do momento em que se define o template e o tipo gen´rico, a fun¸˜o e a classe s˜o definidos normalmente, a e ca a declara¸˜o se d´ da seguinte forma: ca a Exemplo: template < typename /* ou class */ Tipo > Podemos usar ”class” ou ”typename”, qualquer um dos dois funciona da mesma forma, muitos optam por ”class”, por ser mais simples de digitar. Outros preferem ”typename” pois isso sugere que o parˆmetro n˜o precisa ser necessariamente uma classe. a a Lucas Lellis e Rodrigo Torres Templates e Operators
  12. 12. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Fun¸oes template c˜ Esse tipo de estrutura possibilita a cria¸˜o de classes e ca fun¸˜es generalistas, podendo ser aplicado ` outras situa¸˜es. co a co Lucas Lellis e Rodrigo Torres Templates e Operators
  13. 13. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Fun¸oes template c˜ Esse tipo de estrutura possibilita a cria¸˜o de classes e ca fun¸˜es generalistas, podendo ser aplicado ` outras situa¸˜es. co a co Um grande benef´ dos templates ´ o feedback imediato ıcio e quanto ` erros durante a compila¸˜o, assim, ´ poss´ evitar, a ca e ıvel ou corrigir esses erros, como a utiliza¸˜o de classes ca incompat´ ıveis, antes mesmo de executar o programa pela primeira vez. Lucas Lellis e Rodrigo Torres Templates e Operators
  14. 14. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Abaixo, o exemplo de uma fun¸˜o bem simples, usando esse ca recurso. teste template <class T> //no lugar de class tambem pode ser usado typename void soma (T a, T b) { T soma = a + b; /*A funcao so ira funcionar em classes que suportem a utilizacao do operador ’+’ */ cout << soma; } Lucas Lellis e Rodrigo Torres Templates e Operators
  15. 15. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Em muitos casos, utilizam-se operadores, como o de adi¸˜o, o ca de atribui¸˜o, ou o de sa´ ca ıda. A utiliza¸˜o deles n˜o ´ feita de ca a e forma abstrata, assim, nesses casos, ser´ necess´ria a a a implementa¸˜o da sobrecarga de operadores, e possivelmente, ca do construtor c´pia. o Lucas Lellis e Rodrigo Torres Templates e Operators
  16. 16. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Em muitos casos, utilizam-se operadores, como o de adi¸˜o, o ca de atribui¸˜o, ou o de sa´ ca ıda. A utiliza¸˜o deles n˜o ´ feita de ca a e forma abstrata, assim, nesses casos, ser´ necess´ria a a a implementa¸˜o da sobrecarga de operadores, e possivelmente, ca do construtor c´pia. o Muitas vezes n˜o ´ necess´rio passar o tipo de dados como a e a parˆmetro ao utilizar uma fun¸˜o template simples. a ca Lucas Lellis e Rodrigo Torres Templates e Operators
  17. 17. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Abaixo, um exemplo da utiliza¸˜o da fun¸˜o soma(), com trˆs ca ca e tipos de dados diferentes: Exemplo main () { int a = 10, b = 15; double x = 13, y = 34,87; Coordenada c1(10,52), c2(25,58); soma(a,b); soma(x,y); soma(c1,c2); //Precisa de sobrecarga de operador } Lucas Lellis e Rodrigo Torres Templates e Operators
  18. 18. Introdu¸˜o ca Templates Operators Conclus˜o a 1 Introdu¸˜o ca Fun¸˜es Template co Classes Template Nesse ultimo caso, se n˜o houver o operador de adi¸˜o, o ´ a ca c´digo n˜o ir´ compilar. o a a Lucas Lellis e Rodrigo Torres Templates e Operators
  19. 19. Introdu¸˜o ca Templates Operators Conclus˜o a 1 2 Introdu¸˜o ca Fun¸˜es Template co Classes Template Nesse ultimo caso, se n˜o houver o operador de adi¸˜o, o ´ a ca c´digo n˜o ir´ compilar. o a a ´ ´bvio que no caso das somas a + b e x + y , isso ocorrer´ Eo a normalmente, mas n˜o pode-se afirmar com certeza quanto a a c1 e c2. Lucas Lellis e Rodrigo Torres Templates e Operators
  20. 20. Introdu¸˜o ca Templates Operators Conclus˜o a 1 2 3 Introdu¸˜o ca Fun¸˜es Template co Classes Template Nesse ultimo caso, se n˜o houver o operador de adi¸˜o, o ´ a ca c´digo n˜o ir´ compilar. o a a ´ ´bvio que no caso das somas a + b e x + y , isso ocorrer´ Eo a normalmente, mas n˜o pode-se afirmar com certeza quanto a a c1 e c2. Para ser utilizada a fun¸˜o soma, nesse exemplo, a fun¸˜o ca ca coordenada deve ter a fun¸˜o de sobrecarga dos operadores ca soma + e sa´ <<, ou o c´digo n˜o ir´ compilar. ıda o a a Lucas Lellis e Rodrigo Torres Templates e Operators
  21. 21. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Classes template O mesmo princ´ pode ser utilizado para definir classes gen´ricas, ıpio e ou containers, como a classe array, da biblioteca padr˜o. A classe ´ a e definida da seguinte forma: exemplo template <class T, size_t N> class array; Nesse caso, s˜o recebidos dois parˆmetros, separados por uma a a v´ ırgula, o primeiro ´ uma classe, que ir´ definir o tipo de dados que e a comp˜e esse array, e o segundo, um valor representando um o tamanho fixo. Lucas Lellis e Rodrigo Torres Templates e Operators
  22. 22. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Neste caso, foi instanciado um array do tipo int com 10 posi¸˜es, a co classe array possui um operador que permite um acesso r´pido ` a a cada elemento, e retorna um valor do tipo T ( int ). exemplo main() { std::array <int,10> myarray; for (int i = 0; i < 10; i++) myarray[i] = i * 10; for (i=0; i<10; i++) cout << myarray[i]; } Lucas Lellis e Rodrigo Torres Templates e Operators
  23. 23. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Esta ´ s´ uma introdu¸˜o aos templates, existem muitos e o ca outros recursos espec´ ıficos do template que n˜o foram a abordados. Lucas Lellis e Rodrigo Torres Templates e Operators
  24. 24. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Fun¸˜es Template co Classes Template Esta ´ s´ uma introdu¸˜o aos templates, existem muitos e o ca outros recursos espec´ ıficos do template que n˜o foram a abordados. Recomendamos um estudo aprofundado atrav´s da e bibliografia. Lucas Lellis e Rodrigo Torres Templates e Operators
  25. 25. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Sobrecarga de operadores 1 Operator ´ um recurso que possibilita a cria¸˜o de fun¸˜es e ca co que atuam sob operadores. Lucas Lellis e Rodrigo Torres Templates e Operators
  26. 26. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Sobrecarga de operadores 1 Operator ´ um recurso que possibilita a cria¸˜o de fun¸˜es e ca co que atuam sob operadores. 2 Quando bem utilizado, esse recurso pode auxiliar tamb´m na e implanta¸˜o de templates, como visto anteriormente. ca Lucas Lellis e Rodrigo Torres Templates e Operators
  27. 27. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Sobrecarga de operadores 1 Operator ´ um recurso que possibilita a cria¸˜o de fun¸˜es e ca co que atuam sob operadores. 2 Quando bem utilizado, esse recurso pode auxiliar tamb´m na e implanta¸˜o de templates, como visto anteriormente. ca 3 Para ser utilizada a fun¸˜o soma, nesse exemplo, a fun¸˜o ca ca coordenada deve ter a fun¸˜o de sobrecarga dos operadores ca soma + e sa´ <<, ou o c´digo n˜o ir´ compilar. ıda o a a Lucas Lellis e Rodrigo Torres Templates e Operators
  28. 28. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Sobrecarga de operadores 1 Operator ´ um recurso que possibilita a cria¸˜o de fun¸˜es e ca co que atuam sob operadores. 2 Quando bem utilizado, esse recurso pode auxiliar tamb´m na e implanta¸˜o de templates, como visto anteriormente. ca 3 Para ser utilizada a fun¸˜o soma, nesse exemplo, a fun¸˜o ca ca coordenada deve ter a fun¸˜o de sobrecarga dos operadores ca soma + e sa´ <<, ou o c´digo n˜o ir´ compilar. ıda o a a 4 A sobrecarga de operadores consegue abstrair fun¸˜es co complexas com elegˆncia e simplicidade. Podendo ser a utilizada, por exemplo para uma soma ou multiplica¸˜o de ca matrizes. Lucas Lellis e Rodrigo Torres Templates e Operators
  29. 29. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Em C++ podemos fazer sobrecarga de fun¸˜es, ou seja, podemos co criar duas fun¸˜es com o mesmo nome, desde que seus parˆmetros co a n˜o sejam semelhantes. a Exemplo ( C++ ) int soma ( int a, int b) { return a + b; } int soma ( int a, int b, int c ) { return a + b + c; } Lucas Lellis e Rodrigo Torres Templates e Operators
  30. 30. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Parˆmetros ”default” a As fun¸˜es operadoras que podem ser declaradas s˜o: co a Operadores + - * / % ^ & | ~! = < > += -= *= /= %= ^= &= |= >> << >>= <<= == != <= >= && || ++ -- ->* , -> [] 90 new new[] delete delete[] Lucas Lellis e Rodrigo Torres Templates e Operators
  31. 31. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Um operator ´ uma fun¸˜o, que ´ declarada com o nome e ca e ’operator’ seguido de um dos operadores apresentados anteriormente. A implementa¸˜o interna de um operador ´ ca e idˆntica a de uma fun¸˜o comum, com algumas particularidades. e ca Exemplo class Circulo { public: int x, y, r; Circulo operator+= ( const Circulo &other ){ x = img.x; y = img.y; r = img.r; } }; Lucas Lellis e Rodrigo Torres Templates e Operators
  32. 32. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Operadores Bin´rios e Un´rios a a 1 Um operador bin´rio definido por uma fun¸˜o n˜o-membro a ca a recebe duas entradas ao mesmo tempo. Lucas Lellis e Rodrigo Torres Templates e Operators
  33. 33. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Operadores Bin´rios e Un´rios a a 1 Um operador bin´rio definido por uma fun¸˜o n˜o-membro a ca a recebe duas entradas ao mesmo tempo. 2 Em alguns casos, h´ a necessidade de realizar a sobrecarga de a operadores, ou seja, criar v´rias vers˜es do operador @ de a o forma que o operador abranja o maior numero de opera¸˜es co poss´ ıvel. Lucas Lellis e Rodrigo Torres Templates e Operators
  34. 34. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Operadores Bin´rios e Un´rios a a 1 Um operador bin´rio definido por uma fun¸˜o n˜o-membro a ca a recebe duas entradas ao mesmo tempo. 2 Em alguns casos, h´ a necessidade de realizar a sobrecarga de a operadores, ou seja, criar v´rias vers˜es do operador @ de a o forma que o operador abranja o maior numero de opera¸˜es co poss´ ıvel. 3 Esse operador pode ser definido como uma fun¸˜o membro ca n˜o-est´tica, esse tipo de fun¸˜o recebe apenas um a a ca parˆmetro, que ir´ interagir com o objeto do qual ele ´ a a e membro. Ou, como uma fun¸˜o n˜o-membro, recebendo dois ca a parˆmetros que interagem entre si. a Lucas Lellis e Rodrigo Torres Templates e Operators
  35. 35. Introdu¸˜o ca Templates Operators Conclus˜o a Introdu¸˜o ca Parˆmetros default a Sobrecarga de Construtores e fun¸˜es da classe co Operadores bin´rios e un´rios a a Exemplo class X{ public: void operator+ (int val ); //Operador interno, Objeto X( int val ); }; void operator+ (X a, X b ); //Operadores externos void operator+ (X a, double val ); void f(X a){ a + 1; // a.operator+ (1) - objeto ’a’ do tipo X interagindo com um numero inteiro 1 + a; // ::operator+ (X(1), a) - Interpreta 1 como um parametro do construtor X(int), interage com um objeto ’a’ do tipo X a + 1.0; // ::operator+ (a, 1.0) - objeto ’a’ do tipo X interagindo com numero do tipo float } Lucas Lellis e Rodrigo Torres Templates e Operators
  36. 36. Introdu¸˜o ca Templates Operators Conclus˜o a O que vem pela frente? O que vem pela frente? Teremos palestras todas as sextas-feiras, abordando cada vez novos conceitos sobre C++. A pr´xima aula ter´ exerc´ o a ıcios pr´ticos sobre Templates e Sobrecarga de operadores. Lembrando a que todas as apresenta¸˜es desse ciclo de palestras ser˜o colocadas co a no moodle do PESL! Nossos canais de comunica¸˜o ca 1 MOODLE do PESL - Curso de C++ : http://pinguim.pro.br/moodle/course/view.php?id=6 2 Portal do Programa de Educa¸˜o em Software Livre ca http://pinguim.pro.br/ 3 Facebook: https://www.facebook.com/PESL.PInguim 4 Youtube: http://www.youtube.com/user/pinguimvideos/ Lucas Lellis e Rodrigo Torres Templates e Operators

×