Académique Documents
Professionnel Documents
Culture Documents
class umValor { int v; public: umValor() { v = 0; } umValor(int j) { v = j; } const umValor operator+(const umValor& u)const { return umValor(v + u v); } umValor& operator+=(const umValor& u) { v += u v; return !t"is; }
Polimorfismo
Linguagens de Programao
Sobrecarga em C++
const umValor& operator++() { ## pre$i%a&o v++; return !t"is; } const umValor operator++(int) { ## pos$i%a&o umValor antes(v); v++; return antes; }
};
Polimorfismo
Linguagens de Programao
Sobrecarga em C++
main() { int a = '( b = )( c = *; c += a +b; umValor r(')( s())( t; t += r + s; r = ++s; s = t++; } T +til na cria,-o &e
T T
S
objetos em &i$erentes conte%tos Sinta%e es.uisita para sobrecarga &e ++ e // 0em to&os opera&ores po&em ser sobrecarrega&os
:: (resolu,-o &e escopo)( (sele,-o &e membro)( si1eo$ (taman"o &o objeto#tipo) n-o po&em
Polimorfismo
Linguagens de Programao
2aram3trico
T
2arametri1a,-o &as estruturas &e &a&os e subprogramas com rela,-o ao tipo &o elemento sobre o .ual operam
S
4bstra,5es recebem um par6metro impl7cito a&icional especi$ican&o o tipo sobre o .ual elas agem
8 i&enti&a&e (8 %) { return %; }
Subprogramas gen3ricos
Polimorfismo
Linguagens de Programao
2aram3trico em C++
T
template :class 8( int tam; class t2il"a { 8 elem<tam=; int topo; public: t2il"a(voi&) { topo = >'; } int va1ia (voi&) { return topo == >'; } voi& empil"a (8); voi& &esempil"a (voi&); de Linguagens 8 obtem8opo (voi&); Programao Polimorfismo
2aram3trico em C++
template :class 8( int tam; voi& t2il"a:8( tam;::empil"a (8 el){ i$ (topo : tam>') elem<++topo= = el; } template :class 8( int tam; voi& t2il"a:8( tam;::&esempil"a (voi&){ i$ (?va1ia()) topo>>; } template :class Linguagens 8( int tam; de 8 t2il"a:8( tam;::obtem8opo (voi&) { 6 Programao Polimorfismo
2aram3trico em C++
class t@ata { int &( m( a; };
voi& main () { t@ata &'( &); t2il"a :int( *; %; t2il"a :t@ata( ); A; % empil"a ('); A empil"a (&'); % empil"a (*); A empil"a (&)); B"ile (?% va1ia() CC ?A va1ia()) { % &esempil"a(); A &esempil"a(); } } Linguagens de
Polimorfismo
Programao
2aram3trico em C++
T
SE possibilita a reutili1a,-o &e cE&igo $onte 0-o 3 poss7vel compilar o cE&igo usuFrio separa&amente &o cE&igo &e implementa,-o G compila&or C++ necessita saber .uais tipos ser-o associa&os ao template
R R
Compila&or necessita veri$icar se o tipo usa&o 3 compat7vel com as opera,5es &e$ini&as nas implementa,5es e saber o taman"o a ser aloca&o Linguagens de Programao 8 Polimorfismo
S
Ha1 varre&ura &o cE&igo usuFrio replica to&o o cE&igo &e implementa,-o para ca&a tipo utili1a&o
Dnclus-o
T T
Caracter7stico &e linguagens orienta&as a objetos Iso &e "ierar.uia &e tipos para cria,-o &e subprogramas e estruturas &e &a&os polimEr$icas D&3ia Hun&amental
S S
Jlementos &os subtipos s-o tamb3m elementos &o supertipo 4bstra,5es $orma&as a partir &o supertipo po&em tamb3m envolver elementos &os seus subtipos
Linguagens de Programao 9
Polimorfismo
Jstreitamento ou @oBncast
T
8ermo usa&o para &escrever a convers-o &e tipos &e objetos no senti&o &a superclasse para as subclasses 0-o 3 completamente seguro para o sistema &e tipos por.ue um membro &a superclasse n-o 3 necessariamente &o mesmo tipo &a subclasse para a .ual se $a1 a convers-o
S S
4lgumas K2s n-o permitem o estreitamento Gutras e%igem .ue ele seja $eito atrav3s &e uma opera,-o &e convers-o e%pl7cita
Polimorfismo
Linguagens de Programao
10
Jstreitamento ou @oBncast
T
Caso a convers-o seja $eita entre classes n-o pertencentes a uma mesma lin"a &e &escen&Mncia na "ierar.uia( ocorrerF erro &e compila,-o S Caso a convers-o seja na mesma lin"a &e &escen&Mncia( mas o objeto &esigna&o pela superclasse n-o seja membro &a classe para o .ual se $a1 o estreitamento( ocorrerF uma e%ce,-o em tempo &e e%ecu,-o S G opera&or instanceo$ permite testar &inamicamente se o objeto &esigna&o pela superclasse realmente 3 &a classe para Linguagens a .ual se de &eseja $a1er a convers-o Programao 11 Polimorfismo
S
L4V4 somente permite a reali1a,-o &e estreitamento atrav3s &e convers-o e%pl7cita
Jstreitamento em C++
T
Heita em tempo &e compila,-o Veri$ica se convers-o ocorre em uma lin"a &e &escen&Mncia
staticNcast
Polimorfismo
Linguagens de Programao
12
Jstreitamento em C++
T
&AnamicNcast
tApei&
Heito em tempo &e e%ecu,-o Veri$ica .ual o tipo re$erencia&o por ponteiro
Linguagens de Programao
Polimorfismo
13
Jstreitamento em C++
Oinclu&e :tApein$o; class ImaClasse { public: virtual voi& temVirtual () {} }; class ImaSubclasse: public ImaClasse {}; class GutraSubclasse: public ImaClasse {}; class GutraClasse {}; main () { ## primeira parte &o e%emplo ImaClasse! pc = neB ImaSubclasse; GutraSubclasse! pos = &AnamicNcast :GutraSubclasse!; (pc); ImaSubclasse! ps = &AnamicNcast :ImaSubclasse!; (pc);
Polimorfismo
Linguagens de Programao
14