Newsgroup: it.comp.lang.c++
Titolo: Problema con overloading operatore

Salve,
Stavo provando a scrivere un programma di prova ma non funziona. Ecco il
sorgente.
#include <iostream>
#include <string>
class String {
	string operator+ (const string& str) {
		string retstr;
		retstr = *this + str + "OK";
		return retstr;
	};
};
string str1 = "Lui", str2 = "gi", str3;
int main () {
	str3 = str1 + str2;
	std::cout << str3 << std::endl;
	return 0;
}
Il suo output è Luigi e non LuigiOK. E' evidente che non usa il "+"
definito da me.
Potete aiutarmi?
Inoltre sapete dirmi che significa il const in una situazione simile?
int myfunc (char ch) const {
	/* istruzioni */
	};
L'ho visto in "C++ corso di programmazione terza ed." di Sanley B.
Lippman
Grazie
Luigi
-- 
Posted from 
smtp6.libero.it
 [193.70.192.127] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 definito da me.
E perché mai dovrebbe? Tu hai definito l'operatore + per la classe String,
poi hai dichiarato tre variabili di tipo std::string... occhio alle
maiuscole, il C++ è case sensitive ;-)
Inoltre c'è un errore nella tua implementazione: all'interno della tua
classe, this è un puntatore a String, non a std::string. Quindi l'operatore
+ che tu usi viene applicato alla classe stessa, e se non sbaglio dovresti
beccarti un bel loop infinito se provassi a usarlo ;-)
Credo che tu volessi ridefinire l'operatore proprio per la classe
std::string... ma non puoi,a meno di non derivarla e ridefinirlo nella
sottoclasse.
Massimo

Allora potresti dirmi quale sarebbe il codice esatto?
L'esercizio dice che data la seguente definizione:
 
class String {
	public:
	// dati
	String operator+ (const string& str) const; 
	// dati
	};
implementare l'operatore "+" per concatenare le String.
Grazie in anticipo.


 L'esercizio dice che data la seguente definizione:
Gli esercizi vanno fatti da soli...
provaci di nuovo seguendo i consigli, e riposta il tutto
hint: this e' String, this->var_della_string_contenuta e' quello che ti 
serve...

> hint: this e' String, this->var_della_string_contenuta e' quello >che ti serve...
Se non ho frainteso vuoi dire che a me serve l'oggetto puntato da this.
Se è così, io uso *this quindi...
Cmq ora ci riprovo e riposto il tutto. Ma senti, per caso mi serve anche
un costruttore e un distruttore o posso farne a meno?
Grazie
Ciao
-- 
Posted from 
smtp2.libero.it
 [193.70.192.52] 


 anche un costruttore e un distruttore o posso farne a meno?
dire che ti servono almeno i costruttori
Stringa (const char* s)
Stringa (const std::string& s)
anche copia e assegnazione, se vuoi.
il distruttore, se non allochi memoria con new o *alloc, non ti serve.

*this.stringa
per la precedenza degli operatori devi scrivere (*this).stringa.
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.44, higher than 97% of all previous test takers.
Visual Basic 5: 3.06, higher than 77% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688

 per la precedenza degli operatori devi scrivere (*this).stringa.
vero, non ho ricontrollato prima di postare.

 
Perché oltre alla dereferenziazione di this quali sono gli altri
operatori che entrano in gioco?
Grazie
Luigi
-- 
Posted from 
smtp6.libero.it
 [193.70.192.127] 


 operatori che entrano in gioco?
Il .
Anche se non e' "overloadabile" e' pur sempre un operatore. E ha precedenza su *
Quindi tu di fatto avevi scritto *(this.stringa)
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

Una nota storica: la noia di dover scrivere ogni volta (*a).b e' cio'
che ha causato l'introduzione di "->" nel C, e quindi nel C++ .
Ciao,
Nicola