Ir para conteúdo
Fórum Script Brasil
  • 0

Sobrecarga de operadores em C++


Castro

Pergunta

:(

Estou precisando de exemplos, o mais simples possível,dos seguintes itens:

1-sobrecarga de operadores inserção e extração de fluxo;

2-Sobrecarga de operador unario;

3-Sobrecarga de operador binário.

Um exemplo de cada e funcionais. Pesquisei na Internet, mas só achei material jogado e complicados.

Pode ser com função amiga, quando aplicavel

Obrigado

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Cara,

Eu tenho um exemplo aqui mas não é tão simples para iniciantes. Ele tem classe e função friend, por isso acho que não são todas as pessoas que vão entender.

#include <iostream>
#include <ctime>

using namespace std;

#include <iomanip>

using std::setw;

class PhoneNumber{
      friend ostream &operator<<(ostream &, const PhoneNumber &);
      friend istream &operator>>(istream &, PhoneNumber &);
      
private:
        char areaCode[4];    //codigo de area com 3 digitos e caractere nulo
        char exchange[5];    //numero central com 3 digitos e nulo
        char line[5];        //numero da linha com 4 digitos e nulo
};

/*Operador de insercao em stream sobrecarregado(não pode ser uma funcao membro se quisermo invoca-la com cout << somePhoneNumber;). */

ostream &operator<<(ostream &output, const PhoneNumber &num)
{
    output << "(" << num.areaCode << ") " << num.exchange << "-" << num.line;
    
    return output;    // possibilita cout << a << b << c;
}

istream &operator>>(istream &input, PhoneNumber &num)
{
    input.ignore();                       // salta (
    input >> setw(4) >> num.areaCode;     //le codigo de area
    input.ignore(2);                      //salta ) e espaco 
    input >> setw(5) >> num.exchange;     //le numero da central
    input.ignore();                       //salta hifen
    input >> setw(5) >> num.line;         //le numero da linha
    
    return input;    // possibilita cin >> a >> b >> c                
}
     
int main ()
{
    PhoneNumber phone;
    
    cout << "Digite numero do telefone no formato (123) 3456-7890:\n";
    // cin >> invoca a funcao operator fazendo a chamada operator >>(cin, phone).
    cin >> phone;    
    //cout << phone invoca a funcao operator fazendo a chamada operator<<(cout, phone).
    cout << "O numero de telefone digitado foi: " << phone << endl;
    
    system("PAUSE");
    return 0;    
}

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

  • 0

:(

Se não me engano, o exemplo que você deu é do livro do Deitel, acertei ? O livro é bom, mas os exemplos dele neste tema, são complexos. O livro do Hebert Schildt - C++ guia para iniciantes - neste tema não dá nem para começar o entendimento.

Consegui este exemplo, mas está dando alguns problemas

#include <iostream>
  using namespace std;
   
  class MinhaString
  {public:
  //MinhaString ( ) { }
  MinhaString (const char* s = "");
  ~MinhaString ( );
  const char* getString ( );
  // Sobre carga de operadores
  void operator = (const char* s);
  bool operator == (const MinhaString s);
  private:
  void setString ( const char* s );
  private:
  int tamanho;
  char* pStr;
  };
   
  void MinhaString::setString ( const char* s )
  {
  pStr = new char [ tamanho + 1 ];
  strcpy ( pStr, s );
  }
  const char* MinhaString::getString ( )
  {
  return pStr;
  }
  void MinhaString::operator = (const char* s)
  {
  //. . .
  }
  bool MinhaString::operator == (const MinhaString s )
  {
  char* aux = new char [ strlen (s.getString()) + 1 ];
  strcpy ( aux, s.getString() );
  // if ( 0 == strcmp ( sPtr, s.getString () ) )
  if ( 0 == strcmp ( pStr, aux ) )
  {
  return true;
  }
  else
  {
  return false;
  }
    }
   
  int main()
  {
   
  }

Poderiam consertar ? não sei o que fazer ?

Erros:

D:\Teste\sobrecarga_Operadores_III.cpp In member function `bool MinhaString:perator==(MinhaString)':

35 D:\Teste\sobrecarga_Operadores_III.cpp passing `const MinhaString' as `this' argument of `const char* MinhaString::getString()' discards qualifiers

36 D:\Teste\sobrecarga_Operadores_III.cpp passing `const MinhaString' as `this' argument of `const char* MinhaString::getString()' discards qualifiers

Obrigado

Editado por Castro
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...