Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ridefinire l'operatore = in modo che faccia copia una stringa in un altra
Forum - C/C++ - ridefinire l'operatore = in modo che faccia copia una stringa in un altra

Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 16:51
Martedì, 24/05/2011
salve a tutti
sto tentando di scrivere il mio primo programma in c++. diciamo che la dose di insulti arrivati al mio povero PC è abbastanza elevata. devo ridefinire l'operatore + e = in modo che facciano rispettivamente una string cut e una string copy. al momento ho provato solo a creare una generica classe che ho chiamato brstringa e sto tentando di provarla ma al momento ho scritto 25 righe di codice neanche e sono due ore che cerco di compliare. il codice è questo
Codice sorgente - presumibilmente C++

  1. #include <QtCore/QCoreApplication>
  2. #include <iostream>
  3. using namespace std;
  4. class brstringa
  5. {
  6. public:
  7.     char *ptrstringa;
  8.     int brstinga(const char *ptr)
  9.     {
  10.         ptrstringa=new char(strlen(ptr)+1);
  11.         strcpy(ptrstringa,ptr);
  12.         return *ptrstringa;
  13.     }
  14. };
  15. int main(int argc, char *argv[])
  16. {
  17.     QCoreApplication a(argc, argv);
  18.     brstringa frase;
  19.     char b,*ptr;
  20.     cout<<"inserisci stringa"<<endl;
  21.     cin>>b;
  22.     ptr=&b;
  23.     frase.brstringa (ptr);
  24.     return a.exec();
  25. }


se mi potete aiutare per ridefinire gli operatori ve ne sarei molto grato!
grazie mille

Ultima modifica effettuata da el cuba libre il 24/05/2011 alle 17:17
PM Quote
Avatar
andrex91 (Member)
Pro


Messaggi: 101
Iscritto: 01/05/2009

Segnala al moderatore
Postato alle 17:18
Martedì, 24/05/2011
1) il costruttore dovrebbe essere brstringa e non brstinga
2) il costruttore non dovrebbe ritornare alcun tipo
3) se vuoi passare un valore al costruttore lo fai in fase di dichiarazione:

Codice sorgente - presumibilmente Plain Text

  1. brstringa frase (ptr);



Direi basta

PM Quote
Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 17:19
Martedì, 24/05/2011
grazie, che stupido non mi ero accorto dell'errore di sintassi!XD

PM Quote
Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 17:33
Martedì, 24/05/2011
ora devo ridefinire l'operato =, pensavo di fare cosi
Codice sorgente - presumibilmente C/C++

  1. brstringa operator =(char *ptr,char b)
  2. {
  3.     return strcpy(ptr,b);
  4. }


ma mi dice che non posso scrivere brstringa operator = perchè brstringa deve essere una costante, mi potete aiutare?
grazie

Ultima modifica effettuata da el cuba libre il 24/05/2011 alle 18:38
PM Quote
Avatar
anthony015 (Member)
Pro


Messaggi: 116
Iscritto: 20/05/2011

Segnala al moderatore
Postato alle 19:08
Martedì, 24/05/2011
void operator=(....)
{
      ...
}

Ultima modifica effettuata da anthony015 il 25/05/2011 alle 17:38
PM Quote
Avatar
el cuba libre (Normal User)
Newbie


Messaggi: 20
Iscritto: 07/03/2011

Segnala al moderatore
Postato alle 10:14
Sabato, 04/06/2011
scusate se vi rispondo dopo un po di tempo, ho dovuto rimettere mano sul codice per ridefinire sia l'operatore + sia l'=. il codice scritto è questo:
Codice sorgente - presumibilmente C++

  1. #include <QtCore/QCoreApplication>
  2. #include <iostream>
  3. #include <cstring>
  4. using namespace std;
  5. class brstringa
  6. {
  7. public:
  8.     char *ptrstringa,*ptr1;
  9.     brstringa(char *ptr);
  10.     brstringa operator +(brstringa &frase1);
  11.     brstringa operator =(brstringa &frase1);
  12. };
  13. brstringa::brstringa(char *ptr)
  14. {
  15.     ptrstringa=new char(strlen(ptr)+1);
  16.     strcpy(ptrstringa,ptr);
  17. }
  18. brstringa:: brstringa operator =(brstringa &frase1)
  19. {
  20.     ptr1=new char(strlen(frase1)+1);
  21.     return strcpy(ptr,frase1.ptrstringa);
  22. }
  23. brstringa:: brstringa operator +(brstringa &frase1)
  24. {
  25.     ptr1=new char (strlen (frase1)+1);
  26.     return strcat(ptr1,frase1.ptrstringa);
  27. }
  28. int main(int argc, char *argv[])
  29. {
  30.     QCoreApplication a(argc, argv);
  31.     brstringa frase1("ciao");
  32.     brstringa frase2("pecora");
  33.     brstringa frase (frase1+frase2);
  34.     brstringa frase3 (frase1=frase2);
  35.     return a.exec();
  36. }


mi dice che l'operatore = deve essere un membro di funzione non statico e non capisco cosa voglio dire, inoltre se passo due parametri alloperatore + mi da errore, mi dice che non ne posso passare più di uno, ma passandogliene uno mi dice che non può convertire brstringa a const char. inoltre ptr1 gli risulta non dichiarato nella ridefinizione dell'operatore +, ma per l'operatore = non mi da problemi.
mi potete aiutare?
grazie mille

PM Quote