Vous êtes sur la page 1sur 14

Sobrecarga em C++

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

int i&enti&a&e (int %) { return %; }


T

Subprogramas espec7$icos para ca&a tipo &o elemento

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

9 poss7vel parametri1ar classes

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

Dmplementa,-o &e template em C++


S S S

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

Convers-o e%pl7cita tra&icional


S
S

Heita em tempo &e compila,-o sem .ual.uer veri$ica,-o


cast

Convers-o e%pl7cita estFtica


S S
S

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

Convers-o e%pl7cita &in6mica


S S
S

&AnamicNcast

Heita em tempo &e e%ecu,-o Veri$ica se convers-o 3 para o tipo correto

8este &in6mico &e tipos


S S
S

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

Vous aimerez peut-être aussi