{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Carga Horária:Carga Horária: 60 horas60 horasCarga Horária:Carga Horária: 60 horas60 horas
Prof.:Prof.: José Eustáquio Rangel de José Eustáquio Rangel de QueirozQueiroz
[email protected]@[email protected]@gmail.com
Prof.:Prof.: José Eustáquio Rangel de José Eustáquio Rangel de QueirozQueiroz
[email protected]@[email protected]@gmail.com
{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Tópicos
8.1 Sobrecarga de Operadores8.2 Função friend8.3 Operador this
Tópicos
8.1 Sobrecarga de Operadores8.2 Função friend8.3 Operador this
RevisãoRevisão
3{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga de Operadores ISobrecarga de Operadores I
Uso de alguns símbolos de operadores Uso de alguns símbolos de operadores Definição de funções-membros especiais Definição de funções-membros especiais de uma classede uma classe
Possibilidade de formulação de notações Possibilidade de formulação de notações convenientes para comportamentos de convenientes para comportamentos de objetosobjetos
Uso de alguns símbolos de operadores Uso de alguns símbolos de operadores Definição de funções-membros especiais Definição de funções-membros especiais de uma classede uma classe
Possibilidade de formulação de notações Possibilidade de formulação de notações convenientes para comportamentos de convenientes para comportamentos de objetosobjetos
Por quePor que??Por quePor que??
4{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Por que?Por que?
Possibilidade de tornar uma operação Possibilidade de tornar uma operação sobre objetos parecer como uma operação sobre objetos parecer como uma operação defaultdefault (e.g. operação sobre tipos (e.g. operação sobre tipos intint) a ) a partir do uso de funções operadoraspartir do uso de funções operadoras
ComplexoComplexo a,b,c; a,b,c;c = a + b;c = a + b;
Por que?Por que?
Possibilidade de tornar uma operação Possibilidade de tornar uma operação sobre objetos parecer como uma operação sobre objetos parecer como uma operação defaultdefault (e.g. operação sobre tipos (e.g. operação sobre tipos intint) a ) a partir do uso de funções operadoraspartir do uso de funções operadoras
ComplexoComplexo a,b,c; a,b,c;c = a + b;c = a + b;
Sobrecarga de Operadores IISobrecarga de Operadores II
5{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Por que?Por que? Por que?Por que?
intint i, j, k; i, j, k; // declaracao de inteiros// declaracao de inteirosfloatfloat m, n, p; m, n, p; // declaracao de variaveis de ponto flutuante// declaracao de variaveis de ponto flutuante
k = i k = i ++ j; j; // adicao e atribuicao de inteiros// adicao e atribuicao de inteirosp = m p = m ++ n; n; // adicao e atribuicao de inteiros de variaveis // adicao e atribuicao de inteiros de variaveis
// de ponto flutuante // de ponto flutuante
Sobrecarga do operador + por default pelo compilador para as operações de adição de tipos integer e float.
Sobrecarga de Operadores IISobrecarga de Operadores II
6{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
SintaxeSintaxe
operator@(lista_de_argumentos)
Função (membro ou não da classe)
Símbolo de operador C++passível de sobrecarga
Exemplos:
operator+
operator-
operator*
operator/
Sobrecarga de Operadores IIISobrecarga de Operadores III
7{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
classclass CStr CStr {{
charchar *pDado; *pDado;intint nComp; nComp;
publicpublic::// …// …voidvoid cat(char *s); cat(char *s);// …// …
CStr CStr operatoroperator++(CStr str1, CStr str2);(CStr str1, CStr str2);CStr CStr operatoroperator++(CStr str, char *s);(CStr str, char *s);CStrCStr operator operator++(char *s, CStr str);(char *s, CStr str);
//Funcoes de acesso//Funcoes de acessochar* le_Dado();char* le_Dado();
int le_Comp(); int le_Comp();
};};
classclass CStr CStr {{
charchar *pDado; *pDado;intint nComp; nComp;
publicpublic::// …// …voidvoid cat(char *s); cat(char *s);// …// …
CStr CStr operatoroperator++(CStr str1, CStr str2);(CStr str1, CStr str2);CStr CStr operatoroperator++(CStr str, char *s);(CStr str, char *s);CStrCStr operator operator++(char *s, CStr str);(char *s, CStr str);
//Funcoes de acesso//Funcoes de acessochar* le_Dado();char* le_Dado();
int le_Comp(); int le_Comp();
};};
Sobrecarga de Operadores IVSobrecarga de Operadores IV
Exemplo 01 Exemplo 01 11/4/4
8{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
void CStr::concat(char *s){ int n; char *pTemp; n=strlen(s); if(n==0) return; pTemp = new char[n+nComp+1]; if(pDado) strcpy(pTemp,pDado); strcat(pTemp,s); pDado=pTemp; nComp+=n;}
Sobrecarga de Operadores VSobrecarga de Operadores V
Exemplo 01 Exemplo 01 22/4/4
9{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga de Operadores VISobrecarga de Operadores VI
Exemplo 01 Exemplo 01 33/4/4CStr CStrCStr CStr::operator::operator++(CStr str1, CStr str2)(CStr str1, CStr str2){{ CStr new_string(str1); CStr new_string(str1); //chamada do construtor de copia para // //chamada do construtor de copia para //
inicializacao de um novo objeto CStr com o primeiro operandoinicializacao de um novo objeto CStr com o primeiro operando new_string.concat(str2.get_Dado()); new_string.concat(str2.get_Dado()); //concatenacao do segundo //concatenacao do segundo
//operando ao final de new_string//operando ao final de new_string returnreturn new_string; new_string; //chamada //chamada do construtor de copia do construtor de copia para a para a
criacao de uma copia do novo valor de retorno new_stringcriacao de uma copia do novo valor de retorno new_string}}
CStr CStrCStr CStr::operator::operator++(CStr str1, CStr str2)(CStr str1, CStr str2){{ CStr new_string(str1); CStr new_string(str1); //chamada do construtor de copia para // //chamada do construtor de copia para //
inicializacao de um novo objeto CStr com o primeiro operandoinicializacao de um novo objeto CStr com o primeiro operando new_string.concat(str2.get_Dado()); new_string.concat(str2.get_Dado()); //concatenacao do segundo //concatenacao do segundo
//operando ao final de new_string//operando ao final de new_string returnreturn new_string; new_string; //chamada //chamada do construtor de copia do construtor de copia para a para a
criacao de uma copia do novo valor de retorno new_stringcriacao de uma copia do novo valor de retorno new_string}}
new_string
strcat(str1,str2)strcat(str1,str2)strlen(str1)+strlen(str2)strlen(str1)+strlen(str2)
str1str1strlen(str1)strlen(str1)
10{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Exemplo 01 Exemplo 01 44/4/4CStr primeiro(“Circuitos”);CStr primeiro(“Circuitos”);CStr ultimo(“Lógicos”);CStr ultimo(“Lógicos”);CStr nome(primeiro+ultimo);CStr nome(primeiro+ultimo);
CStr primeiro(“Circuitos”);CStr primeiro(“Circuitos”);CStr ultimo(“Lógicos”);CStr ultimo(“Lógicos”);CStr nome(primeiro+ultimo);CStr nome(primeiro+ultimo);
CStr CStr::operator+(CStr str1,CStr str2) {CStr new_string(str1);new_string.concat(str2.get());return new_string;
}
“Circuitos Lógicos”
Objeto temporário CStrConstrutor Construtor de Cópiade Cópia
nomenome
Sobrecarga de Operadores VII
Sobrecarga de Operadores VII
11{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Implementação IImplementação I
Como Como funções-membrosfunções-membros
Como Como funções não membrosfunções não membros ou ou amigasamigas ((friendfriend))
Função operadora Função operadora Necessidade de Necessidade de declaração como uma declaração como uma friendfriend se for se for necessário o acesso a dados necessário o acesso a dados protectedprotected ou ou privateprivate
Tradução da expressão Tradução da expressão obj1@obj2obj1@obj2 obj1.operator@(obj2)obj1.operator@(obj2) Se a função for Se a função for
definida definida dentrodentro da classe da classe obj1obj1 operator@(obj1,obj2)operator@(obj1,obj2) Se a função for Se a função for
definida definida forafora da classe da classe obj1obj1
Implementação IImplementação I
Como Como funções-membrosfunções-membros
Como Como funções não membrosfunções não membros ou ou amigasamigas ((friendfriend))
Função operadora Função operadora Necessidade de Necessidade de declaração como uma declaração como uma friendfriend se for se for necessário o acesso a dados necessário o acesso a dados protectedprotected ou ou privateprivate
Tradução da expressão Tradução da expressão obj1@obj2obj1@obj2 obj1.operator@(obj2)obj1.operator@(obj2) Se a função for Se a função for
definida definida dentrodentro da classe da classe obj1obj1 operator@(obj1,obj2)operator@(obj1,obj2) Se a função for Se a função for
definida definida forafora da classe da classe obj1obj1
Sobrecarga de Operadores VIII
Sobrecarga de Operadores VIII
12{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
classclass Complex { Complex { ...... publicpublic:: ...... Complex Complex operatoroperator++((constconst Complex &op) Complex &op) {{ doubledouble real = _real + op._real, real = _real + op._real, imag = _imag + op._imag;imag = _imag + op._imag; returnreturn(Complex(real, imag));(Complex(real, imag)); }} ...... };};
c = a+b; c = a.operator+ (b);
Implementação II – Exemplo 02Implementação II – Exemplo 02
Definição como uma Definição como uma funfunçção-membroão-membro
Implementação II – Exemplo 02Implementação II – Exemplo 02
Definição como uma Definição como uma funfunçção-membroão-membro
Sobrecarga de Operadores VIII
Sobrecarga de Operadores VIII
13{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
classclass Complex { Complex { ...... publicpublic:: ...... doubledouble real(){ real(){returnreturn _real;} _real;} // funcoes de acesso necessarias// funcoes de acesso necessarias doubledouble imag(){ imag(){ returnreturn _imag; } _imag; }...... };};
c = a+b; c = operator+ (a, b);
Implementação III – Exemplo 03Implementação III – Exemplo 03
Definição como uma Definição como uma funfunççãoão não membronão membro
Implementação III – Exemplo 03Implementação III – Exemplo 03
Definição como uma Definição como uma funfunççãoão não membronão membro
Sobrecarga de Operadores IXSobrecarga de Operadores IX
Complex Complex operatoroperator++(Complex &op1, Complex &op2) (Complex &op1, Complex &op2) {{ doubledouble real = op1.real() + op2.real(), imag = op1.imag() + real = op1.real() + op2.real(), imag = op1.imag() +
op2.imag();op2.imag(); returnreturn(Complex(real, imag));(Complex(real, imag));}}
14{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
classclass Complex { Complex { ...... publicpublic:: ...... friendfriend Complex operator +(const Complex &, const Complex & ); Complex operator +(const Complex &, const Complex & ); … … };};
c = a+b; c = operator+ (a, b);
Implementação IV – Exemplo 04Implementação IV – Exemplo 04
Definição como uma Definição como uma funfunççãoão friendfriend
Implementação IV – Exemplo 04Implementação IV – Exemplo 04
Definição como uma Definição como uma funfunççãoão friendfriend
Sobrecarga de Operadores IXSobrecarga de Operadores IX
Complex Complex operatoroperator++(Complex &op1, Complex &op2) (Complex &op1, Complex &op2) {{ doubledouble real = op1.real() + op2.real(), imag = op1.imag() + real = op1.real() + op2.real(), imag = op1.imag() +
op2.imag();op2.imag(); returnreturn(Complex(real, imag));(Complex(real, imag));}}
15{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Funções-membros comuns, Funções Funções-membros comuns, Funções Estáticas e Funções AmigasEstáticas e Funções Amigas
Parte Parte privateprivate da definição da classe da definição da classe passível de acesso pela funçãopassível de acesso pela função
Inclusão da função no escopo da classeInclusão da função no escopo da classe
Invocação da função em um objetoInvocação da função em um objeto
Funções-membros comuns, Funções Funções-membros comuns, Funções Estáticas e Funções AmigasEstáticas e Funções Amigas
Parte Parte privateprivate da definição da classe da definição da classe passível de acesso pela funçãopassível de acesso pela função
Inclusão da função no escopo da classeInclusão da função no escopo da classe
Invocação da função em um objetoInvocação da função em um objeto
Sobrecarga de Operadores XSobrecarga de Operadores X
QQuaisuais das 3 afirmações das 3 afirmações são são verdadeirasverdadeiras sobre sobre as diferentes funções?as diferentes funções?
QQuaisuais das 3 afirmações das 3 afirmações são são verdadeirasverdadeiras sobre sobre as diferentes funções?as diferentes funções?
16{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Funções AmigasFunções Amigas Introdução de acoplamento extra antre Introdução de acoplamento extra antre
classes via declarações classes via declarações friendfriend
Declaração de um objeto as Declaração de um objeto as friend friend Acesso a Acesso a todostodos os membros não públicos os membros não públicos como se assim o fossemcomo se assim o fossem
Acesso Acesso unidirecionalunidirecional Se Se Obj1Obj1 for designado como for designado como friendfriend de de Obj2Obj2
Possibilidade de acesso membros não Possibilidade de acesso membros não públicos de públicos de Obj2Obj2 por por Obj1Obj1, mas , mas nãonão o o contráriocontrário
Definição feita Definição feita forafora do escopo da classe do escopo da classe que a considerar como amigaque a considerar como amiga
Funções AmigasFunções Amigas Introdução de acoplamento extra antre Introdução de acoplamento extra antre
classes via declarações classes via declarações friendfriend
Declaração de um objeto as Declaração de um objeto as friend friend Acesso a Acesso a todostodos os membros não públicos os membros não públicos como se assim o fossemcomo se assim o fossem
Acesso Acesso unidirecionalunidirecional Se Se Obj1Obj1 for designado como for designado como friendfriend de de Obj2Obj2
Possibilidade de acesso membros não Possibilidade de acesso membros não públicos de públicos de Obj2Obj2 por por Obj1Obj1, mas , mas nãonão o o contráriocontrário
Definição feita Definição feita forafora do escopo da classe do escopo da classe que a considerar como amigaque a considerar como amiga
Sobrecarga de Operadores XISobrecarga de Operadores XI
17{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Aplicações de Funções Amigas IAplicações de Funções Amigas I PrincipaisPrincipais
Possibilidade de acesso mais eficiente a Possibilidade de acesso mais eficiente a membros de dados do que than the membros de dados do que than the function callfunction call
Acomodação de funções operadoras com Acomodação de funções operadoras com facilidade de acesso a membros não facilidade de acesso a membros não públicos de dadospúblicos de dados
Recomendação IRecomendação I Uso cauteloso de funções amigas Uso cauteloso de funções amigas Acesso Acesso
irrestrito a membros não públicos de irrestrito a membros não públicos de dados pode impactar sobre a ocultação dos dados pode impactar sobre a ocultação dos dados!!!dados!!!
Aplicações de Funções Amigas IAplicações de Funções Amigas I PrincipaisPrincipais
Possibilidade de acesso mais eficiente a Possibilidade de acesso mais eficiente a membros de dados do que than the membros de dados do que than the function callfunction call
Acomodação de funções operadoras com Acomodação de funções operadoras com facilidade de acesso a membros não facilidade de acesso a membros não públicos de dadospúblicos de dados
Recomendação IRecomendação I Uso cauteloso de funções amigas Uso cauteloso de funções amigas Acesso Acesso
irrestrito a membros não públicos de irrestrito a membros não públicos de dados pode impactar sobre a ocultação dos dados pode impactar sobre a ocultação dos dados!!!dados!!!
Sobrecarga de Operadores XII
Sobrecarga de Operadores XII
18{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Aplicações de Funções Amigas IIAplicações de Funções Amigas II Recomendação IIRecomendação II
Permissão para alteração do estado Permissão para alteração do estado interno de um objeto de interno de um objeto de forafora da classe da classe Preferência do uso de funções-membros da Preferência do uso de funções-membros da classe para fazê-lo, ao invés de funções classe para fazê-lo, ao invés de funções amigas!!!amigas!!!
Aplicações de Funções Amigas IIAplicações de Funções Amigas II Recomendação IIRecomendação II
Permissão para alteração do estado Permissão para alteração do estado interno de um objeto de interno de um objeto de forafora da classe da classe Preferência do uso de funções-membros da Preferência do uso de funções-membros da classe para fazê-lo, ao invés de funções classe para fazê-lo, ao invés de funções amigas!!!amigas!!!
Sobrecarga de Operadores XIII
Sobrecarga de Operadores XIII
19{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Operador de AtribuiçãoOperador de Atribuição Suporte entre objetos do Suporte entre objetos do mesmomesmo tipo tipo
Provimento de uma função “oculta” de Provimento de uma função “oculta” de atribuição pelo compilador se o atribuição pelo compilador se o programador não escrever umaprogramador não escrever uma
Idem para o Idem para o construtor de cópiaconstrutor de cópia
Sintaxe Sintaxe
class& class::operator=(const class class& class::operator=(const class &arg) &arg)
{{ //…//…
}}
Operador de AtribuiçãoOperador de Atribuição Suporte entre objetos do Suporte entre objetos do mesmomesmo tipo tipo
Provimento de uma função “oculta” de Provimento de uma função “oculta” de atribuição pelo compilador se o atribuição pelo compilador se o programador não escrever umaprogramador não escrever uma
Idem para o Idem para o construtor de cópiaconstrutor de cópia
Sintaxe Sintaxe
class& class::operator=(const class class& class::operator=(const class &arg) &arg)
{{ //…//…
}}
Sobrecarga de Operadores XIV
Sobrecarga de Operadores XIV
20{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Exemplo 05 – Atribuição para a classe Exemplo 05 – Atribuição para a classe CStrCStr Exemplo 05 – Atribuição para a classe Exemplo 05 – Atribuição para a classe CStrCStr
Sobrecarga de Operadores XV
Sobrecarga de Operadores XV
CStr& CStr::operator=(const CStr &source){CStr& CStr::operator=(const CStr &source){//Faz a copia//Faz a copiareturn *this;return *this;}}
CStr& CStr::operator=(const CStr &source){CStr& CStr::operator=(const CStr &source){//Faz a copia//Faz a copiareturn *this;return *this;}}
Retorno de uma referência para (o endereço de) um objeto CStrCStr
Tipo de argumento - referência para um objeto CStrCStr (o qual, por ser constconst, nãonão pode ser modificado pela função)
str1=str2;
str1.operator=(str2)Atribuição da cópia ≠ Construtor de cópia
CStr& CStr::operator=(const CStr & source)
Função de atribuição chamada como uma função-membro do operando da esquerda Retorno do próprio objeto
21{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Apontador Apontador this this I I No contexto de uma função-membro No contexto de uma função-membro
Apontador para o objeto atual (aquele Apontador para o objeto atual (aquele através do qual a função foi invocada)através do qual a função foi invocada)
Passagem de Passagem de thisthis oculto por C++ oculto por C++ SemSempprere que uma função-membro for que uma função-membro for invocadainvocada
No contexto da definição de uma função-No contexto da definição de uma função-membro membro Existência de um uso implícito Existência de um uso implícito de de thisthis para referência aos membros de para referência aos membros de dadosdados
Apontador Apontador this this I I No contexto de uma função-membro No contexto de uma função-membro
Apontador para o objeto atual (aquele Apontador para o objeto atual (aquele através do qual a função foi invocada)através do qual a função foi invocada)
Passagem de Passagem de thisthis oculto por C++ oculto por C++ SemSempprere que uma função-membro for que uma função-membro for invocadainvocada
No contexto da definição de uma função-No contexto da definição de uma função-membro membro Existência de um uso implícito Existência de um uso implícito de de thisthis para referência aos membros de para referência aos membros de dadosdados
Sobrecarga de Operadores XVI
Sobrecarga de Operadores XVI
22{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Apontador Apontador this this II II Apontador Apontador this this II II
Sobrecarga de Operadores XVII
Sobrecarga de Operadores XVII
pDadopDado
nTamnTam
this Referência ao membro de Dados
Equivalente a
pDadopDado this->pDado
nTamnTam this->nTamObjeto CStr
(*this)
23{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream I I
Objeto Objeto coutcout Representante do Representante do streamstream de saída em C++ de saída em C++
Relacionado ao Relacionado ao fluxo de dados a serem fluxo de dados a serem impressos na telaimpressos na tela
Operador de Inserção Operador de Inserção << << Operador Operador <<<< sobrecarregado para a sobrecarregado para a
execução da saída (impressão em tela) a execução da saída (impressão em tela) a partir de partir de streamsstreams
Objeto Objeto coutcout usado em conjunto com usado em conjunto com <<<< para para a impressão de dadosa impressão de dados
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream I I
Objeto Objeto coutcout Representante do Representante do streamstream de saída em C++ de saída em C++
Relacionado ao Relacionado ao fluxo de dados a serem fluxo de dados a serem impressos na telaimpressos na tela
Operador de Inserção Operador de Inserção << << Operador Operador <<<< sobrecarregado para a sobrecarregado para a
execução da saída (impressão em tela) a execução da saída (impressão em tela) a partir de partir de streamsstreams
Objeto Objeto coutcout usado em conjunto com usado em conjunto com <<<< para para a impressão de dadosa impressão de dados
Sobrecarga de Operadores XVIII
Sobrecarga de Operadores XVIII
24{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream II II
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream II II
Sobrecarga de Operadores XIX
Sobrecarga de Operadores XIX
#include#include <iostream> <iostream>usingusing namespace std; namespace std;intint main() main(){{
cout << “Teste com um cout\n";cout << “Teste com um cout\n";// impressao de uma linha a partir de multiplos comandos// impressao de uma linha a partir de multiplos comandoscout << "Teste com ";cout << "Teste com ";cout << "dois couts\n";cout << "dois couts\n";// uso do manipulador endl, geracao de caractere de nova // uso do manipulador endl, geracao de caractere de nova // linha e esvaziamento do buffer de saída// linha e esvaziamento do buffer de saídacout << “Teste com endl..." << endl;cout << “Teste com endl..." << endl;cout << “... e flush \n";cout << “... e flush \n";cout << flush; cout << flush; // esvaziamento do buffer de saída, sem// esvaziamento do buffer de saída, sem//geracao de nova linha//geracao de nova linhareturnreturn 0; 0;
}}
25{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream III III
Retorno de uma referência ao objeto Retorno de uma referência ao objeto coutcout por por <<<< Possibilidade de encadeamento Possibilidade de encadeamento de vários de vários coutcout e de combinação de e de combinação de constantes e variáveisconstantes e variáveis
intint x = 1, y = 2;x = 1, y = 2;// impressao de uma string e o resultado da // impressao de uma string e o resultado da soma entre as variaveis x e ysoma entre as variaveis x e ycout << "Encadeamento de saidas – Soma de cout << "Encadeamento de saidas – Soma de dois números " << x + y << endl;dois números " << x + y << endl;
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream III III
Retorno de uma referência ao objeto Retorno de uma referência ao objeto coutcout por por <<<< Possibilidade de encadeamento Possibilidade de encadeamento de vários de vários coutcout e de combinação de e de combinação de constantes e variáveisconstantes e variáveis
intint x = 1, y = 2;x = 1, y = 2;// impressao de uma string e o resultado da // impressao de uma string e o resultado da soma entre as variaveis x e ysoma entre as variaveis x e ycout << "Encadeamento de saidas – Soma de cout << "Encadeamento de saidas – Soma de dois números " << x + y << endl;dois números " << x + y << endl;
Sobrecarga de Operadores XX
Sobrecarga de Operadores XX
26{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream IV IV
Alternativa para a apresentação de Alternativa para a apresentação de caracteres em tela caracteres em tela semsem o uso do operador o uso do operador de inserção de inserção << << Uso da função-membro Uso da função-membro putput
cout.put('caractere');cout.put('caractere');//saida de um único //saida de um único // caractere// caracterecout.put('caractere').put('\n');cout.put('caractere').put('\n');//saída encadeada//saída encadeada
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream IV IV
Alternativa para a apresentação de Alternativa para a apresentação de caracteres em tela caracteres em tela semsem o uso do operador o uso do operador de inserção de inserção << << Uso da função-membro Uso da função-membro putput
cout.put('caractere');cout.put('caractere');//saida de um único //saida de um único // caractere// caracterecout.put('caractere').put('\n');cout.put('caractere').put('\n');//saída encadeada//saída encadeada
Sobrecarga de Operadores XXI
Sobrecarga de Operadores XXI
27{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream V V Objeto Objeto cincin
Representante do Representante do streamstream de entrada em de entrada em C++C++ Relacionado ao Relacionado ao fluxo de dados a serem fluxo de dados a serem
capturados sem espaços e sem tabulações, capturados sem espaços e sem tabulações, vindos do tecladovindos do teclado
Operador de Extração Operador de Extração >> >> Operador Operador >>>> sobrecarregado para a sobrecarregado para a
execução da entrada de execução da entrada de streamsstreams
Objeto Objeto cincin usado em conjunto com usado em conjunto com >>>> para para a aquisição de dados do tecladoa aquisição de dados do teclado
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream V V Objeto Objeto cincin
Representante do Representante do streamstream de entrada em de entrada em C++C++ Relacionado ao Relacionado ao fluxo de dados a serem fluxo de dados a serem
capturados sem espaços e sem tabulações, capturados sem espaços e sem tabulações, vindos do tecladovindos do teclado
Operador de Extração Operador de Extração >> >> Operador Operador >>>> sobrecarregado para a sobrecarregado para a
execução da entrada de execução da entrada de streamsstreams
Objeto Objeto cincin usado em conjunto com usado em conjunto com >>>> para para a aquisição de dados do tecladoa aquisição de dados do teclado
Sobrecarga de Operadores XXII
Sobrecarga de Operadores XXII
28{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VI VI
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VI VI
Sobrecarga de Operadores XXIII
Sobrecarga de Operadores XXIII
#include#include <iostream> <iostream>usingusing namespace std; namespace std;intint main() main(){{
int n1,n2;int n1,n2;cout << “Captura do primeiro valor: ";cout << “Captura do primeiro valor: ";cin >> n1;cin >> n1;cout << endl;cout << endl;cout << “Captura do segundo valor: ";cout << “Captura do segundo valor: ";cin >> n2;cin >> n2;cout << endl;cout << endl;returnreturn 0; 0;
}}
29{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VII VII
SínteseSíntese cout<<cout<< e e cin>>cin>> Sobrecargas de Sobrecargas de
operadores disponíveis na biblioteca operadores disponíveis na biblioteca padrão padrão iostreamiostream da linguagem C++ da linguagem C++
coutcout e e cincin Objetos das classes Objetos das classes ostreamostream e e istreamistream, respectivamente, respectivamente
Possibilidade de inclusão de funções Possibilidade de inclusão de funções amigas para a sobrecarga dos operadoresamigas para a sobrecarga dos operadores <<<< e e >>>>
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VII VII
SínteseSíntese cout<<cout<< e e cin>>cin>> Sobrecargas de Sobrecargas de
operadores disponíveis na biblioteca operadores disponíveis na biblioteca padrão padrão iostreamiostream da linguagem C++ da linguagem C++
coutcout e e cincin Objetos das classes Objetos das classes ostreamostream e e istreamistream, respectivamente, respectivamente
Possibilidade de inclusão de funções Possibilidade de inclusão de funções amigas para a sobrecarga dos operadoresamigas para a sobrecarga dos operadores <<<< e e >>>>
Sobrecarga de Operadores XXIV
Sobrecarga de Operadores XXIV
30{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VIII VIII
Exemplo 06Exemplo 06
Sobrecarga dos Operadores de Inserção e Sobrecarga dos Operadores de Inserção e Extração de Extração de StreamStream VIII VIII
Exemplo 06Exemplo 06
Sobrecarga de Operadores XXV
Sobrecarga de Operadores XXV
friend ostream& operator<< (ostream &sai, const Date &d);
ostream& operator<<(ostream &sai, const Data &d){ sai<<d.mes<<“/”<<d.dia<<“/”<<d.ano; return sai;}…cout<< d1;cout<< d1; // operador sobrecarregado
coutcout objeto de ostreamostream
31{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
Sobrecarga dos Operadores de Inserção e Extração Sobrecarga dos Operadores de Inserção e Extração de de StreamStream IX IX
Exemplo 08 – Inclusão de uma função amiga para Exemplo 08 – Inclusão de uma função amiga para sobrecarga de sobrecarga de >>>>
Sobrecarga dos Operadores de Inserção e Extração Sobrecarga dos Operadores de Inserção e Extração de de StreamStream IX IX
Exemplo 08 – Inclusão de uma função amiga para Exemplo 08 – Inclusão de uma função amiga para sobrecarga de sobrecarga de >>>>
Sobrecarga de Operadores XXVI
Sobrecarga de Operadores XXVI
friend istream& operator>> (istream &entra, Data &d);
istream& operator>> (istream &entra, Data &d) { char mmddaa[9];
entra >> mmddaa;
// verificacao de validade dos dados if (d.set(mmddaa)) return entra;
cout<< " Formato invalido da data : "<<d<<endl; exit(-1); }
cincin objeto de istreamistream
cin >> d1;cin >> d1;
32{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
SínteseSíntese
Possibilidade de formulação de notações Possibilidade de formulação de notações convenientes para comportamentos de objetosconvenientes para comportamentos de objetos
Possibilidades de implementaçãoPossibilidades de implementação Via Via funções-membrosfunções-membros Via Via funções não membros típicasfunções não membros típicas Via Via funções amigasfunções amigas
SínteseSíntese
Possibilidade de formulação de notações Possibilidade de formulação de notações convenientes para comportamentos de objetosconvenientes para comportamentos de objetos
Possibilidades de implementaçãoPossibilidades de implementação Via Via funções-membrosfunções-membros Via Via funções não membros típicasfunções não membros típicas Via Via funções amigasfunções amigas
Sobrecarga de Operadores XXVII
Sobrecarga de Operadores XXVII
{jose
ana,
ran
gel}@
dsc.
ufcg
.edu
.br
DSC/CCT/UFCG
DSC/CCT/UFCG
[email protected]@dsc.ufcg.edu.br [email protected]@dsc.ufcg.edu.br
José Eustáquio Rangel de Queiroz
José Eustáquio Rangel de Queiroz
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE
UNIVERSIDADE FEDERAL DE CAMPINA GRANDECENTRO DE ENGENHARIA ELÉTRICA E
INFORMÁTICACENTRO DE ENGENHARIA ELÉTRICA E
INFORMÁTICA
Top Related