Faculdade de Informática, PUCRS, Porto Alegre, RS
Coordenação: Isabel Harb Manssour
Instrutores: Eduardo Bezerra e Cristiane Woszezenki
Operador de resolução de escopo, sobrecarga de funções, templates
int ref = 1000; void main(void) { int j = 0; if (j = = 0) { int ref = 2; cout << ref * ::ref << endl; } }
Sobrecarga de funções é um recurso implementado em C++ que possibilita definições de várias funções com o mesmo nome, desde que tenham parâmetros diferentes. Quando uma função é chamada, o código seleciona a função apropriada examinando os argumentos.
Exemplo:
int quadrado(int x) { return x * x; } double quadrado (double y) { return y * y; } void main(void) { int r1; int f1; r1 = quadrado( 7 ); f1 = quadrado ( 2.2 ); cout << “r1 = ” << r1 << “, f1 = ” << f1 << endl; }
Resultado: r1 = 49, f1 = 4.84
Se a lógica dos programas e suas operações são idênticas para os vários tipos de dados, isto pode ser codificado mais convenientemente usando os gabaritos (templates) de função. Dependendo dos tipos dos parâmetros nas chamadas da função, o C++ gera automaticamente funções gabarito para tratar cada tipo de chamada adequadamente.
Exemplo:
template <class T> T maximo (T valor1, T valor2, T valor3) { T max = valor 1; if (valor2 > max) max = valor2; if (valor3 > max) max = valor 3; return max; }
Este template declara um parâmetro formal T, como tipo de dados que serão testados pela função. O compilador substitui T ao longo de toda definição do template na compilação e é gerado uma função completa.
int maximo (int valor1, int valor2, int valor3) { int max = valor1; if (valor2 > max) max = valor2; if (valor3 > max) max = valor3; return max; } template <class T> T Maximo (T valor1, T valor2, T valor3) { T max = valor1; if (valor2 > max) max = valor2; if (valor3 > max) max = valor3; return max; } void main(void) { int i1, i2, i3; cout << “Escreva 3 valores inteiros: ”; cin >> i1 >> i2 >> i3; cout << “O maior valor e: ” << Maximo (i1, i2, i3) << endl; double d1, d2, d3; cout << “Escreva 3 valores reais: ”; cin >> d1 >> d2 >> d3; cout << “O maior valor e: ” << Maximo (d1, d2, d3) << endl; } Outro exemplo: #include <iostream> using namespace std; template <class T> void swap_edu(T &x, T &y) { T h = x; x = y; y = h; } int main() { char c = 'z', d = 'a'; cout << "CHAR" << endl << "----" << endl; cout << "B4 c = " << c << ", d = " << d << endl; swap_edu(c, d); cout << "After c = " << c << ", d = " << d << endl << endl; int n = 5, m = 6; cout << "INT" << endl << "---" << endl; cout << "B4 n = " << n << ", m = " << m << endl; swap_edu(n, m); cout << "After n = " << n << ", m = " << m << endl; return 0; }