Pergunta

class mystring { 
private:
 string s;
public:
 mystring(string ss) { 
  cout << "mystring : mystring() : " + s <<endl; 
  s = ss;
 }
 /*! mystring& operator=(const string ss) { 
  cout << "mystring : mystring& operator=(string) : " + s <<endl;
  s = ss; 
  //! return this; 
  return (mystring&)this; // why COMPILE ERROR
 } */
 mystring operator=(const string ss) {
  cout << "mystring : mystring operator=(string) : " + s <<endl;
  s = ss;
  return *this;
 } 
 mystring operator=(const char ss[]) {
  cout << "mystring : mystring operator=(char[]) : " << ss <<endl;
  s = ss;
  return *this;
 }
};

mystring str1 =  "abc"; // why COMPILE ERROR
mystring *str2 = new mystring("bcd");

Então as perguntas são

  1. Como fazer um mystring e opeartor correto = sobrecarga? Isso é, como eu poderia retornar uma referência em vez de um ponteiro? (Poderíamos transferir entre referência e ponteiro em C ++?)

  2. Como fazer um operador correto do mystring = sobrecarga? Eu pensei que o código -fonte funcionaria bem, mas acontece que ainda não poderia atribuir const char [] ao mystring como se não sobrecarregue o operador =.

obrigado.

Foi útil?

Solução

O que você precisa é um construtor de 'conversão' que leva um const char*:

mystring( char const* ss) {
  cout << "mystring : mystring(char*) ctor : " << ss <<endl;
  s = ss;
}

A linha com a qual você está tendo um problema:

mystring str1 =  "abc"; // why COMPILE ERROR

Não é realmente uma tarefa - é um inicializador.

Outras dicas

mystring& operator=(const string &ss) 
{
    cout << "mystring : mystring operator=(string) : " + s <<endl;
    s = ss;

    return *this; // return the reference to LHS object.
} 

Como outros apontaram, "string" tem const char * Digite e você deve sobrecarregar o operador de atribuição para ele.

mystring& operator=(const char * s);

Para obter uma referência de um ponteiro *this é suficiente, não há necessidade de lançar nada.

 mystring& operator=(const string& ss) {
  cout << "mystring : mystring operator=(string) : " << s << endl;
  s = ss;

  return *this;
 } 
 mystring& operator=(const char* const pStr) {
  cout << "mystring : mystring operator=(zzzz) : " << pStr << endl;
  s = pStr;

  return *this;
 }
  • Eu adicionei '&' às suas cordas para que ele retorne uma referência a 'this' e não uma cópia dele (é uma boa prática fazer isso para o parâmetro de entrada também, pois você não está inventando uma cópia da sequência de entrada) , Assim,
  • Eu troquei um '+' para '<<' na linha 2
  • e eu alterei sua matriz para umconst char const* ponteiro
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top