Como STD :: String sobrecarga o operador de atribuição?
-
21-09-2019 - |
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
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 ++?)
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.
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