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++ - myString ereditando da String
Forum - C/C++ - myString ereditando da String

Avatar
BugliL (Member)
Pro


Messaggi: 135
Iscritto: 09/08/2009

Segnala al moderatore
Postato alle 12:31
Giovedì, 15/07/2010
Vorrei provare a usare la classe già presente di base nel C++ estendendola per crearne una mia myString aggiungendo alcune funzioni di base e facendo l'overloading di alcuni metodi per semplificarmi la vita in alcuni progetti.

Ho provato a fare questo:
Codice sorgente - presumibilmente C/C++

  1. #include<string>
  2. using std::string;
  3.  
  4. class myString : public string{};


Cercando di far ereditare alla mia classe quella di string.

NetBeans mi fa richiamare i metodi e gli operatori nel main di prova che ho creato per controllare se davvero ereditava quindi li vede e ci sono.
Codice sorgente - presumibilmente C/C++

  1. int main(int argc, char** argv) {
  2.     myString str;
  3.     string helloWorld = "Hello world";    
  4.     str = helloWorld.c_str();
  5.     cout << str << endl;
  6.     return (EXIT_SUCCESS);
  7. }



In compilazione invece mi da questo errore:
g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:19: error: no match for ‘operator=’ in ‘str = helloWorld’
myString.h:14: note: candidates are: myString& myString::operator=(const myString&)

Qualche idea su cosa sia che non va?

Ultima modifica effettuata da BugliL il 15/07/2010 alle 12:32
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:37
Giovedì, 15/07/2010

non trova l'operatore di assegnamento, credo che devi cmq definirlo nella classe derivata

PM Quote
Avatar
BugliL (Member)
Pro


Messaggi: 135
Iscritto: 09/08/2009

Segnala al moderatore
Postato alle 16:52
Venerdì, 16/07/2010
Era proprio per evitare di dover ridefinire ogni metodo e ogni operatore che volevo ereditare da string. I metodi cmq riesce a vederli..... qualcuno ne sa il motivo?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 17:26
Venerdì, 16/07/2010

PM Quote
Avatar
BugliL (Member)
Pro


Messaggi: 135
Iscritto: 09/08/2009

Segnala al moderatore
Postato alle 18:26
Venerdì, 16/07/2010
Testo quotato

Postato originariamente da HeDo:


qui hanno risolto un problema simile: http://bytes.com/topic/c/answers/464157-operator-overloadi ...



" Your operator== here _hides_ the base's one. It does not override it because it has a different argument type."

Qui dice che l'operatore non viene sovrascritto ma solo nascosto visto che viene ridefinito. Ma nel mio codice ho provato anche a toglierlo proprio l'overloading ma non fa lo stesso.

Il problema riguarda solo l'assegnazione perchè << funziona come operatore.

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 19:25
Venerdì, 16/07/2010
Testo quotato

Postato originariamente da BugliL:

Testo quotato

Postato originariamente da HeDo:


qui hanno risolto un problema simile: http://bytes.com/topic/c/answers/464157-operator-overloadi ...



" Your operator== here _hides_ the base's one. It does not override it because it has a different argument type."

Qui dice che l'operatore non viene sovrascritto ma solo nascosto visto che viene ridefinito. Ma nel mio codice ho provato anche a toglierlo proprio l'overloading ma non fa lo stesso.

Il problema riguarda solo l'assegnazione perchè << funziona come operatore.  



non devi toglierlo, devi usare il dynamic cast come suggerito

PM Quote
Avatar
BugliL (Member)
Pro


Messaggi: 135
Iscritto: 09/08/2009

Segnala al moderatore
Postato alle 0:07
Sabato, 17/07/2010
Si l'avevo copiato quello, è che volevo capire sopratutto il perchè anche quando non cerco di fare overloading non riesce a vedermi il vecchio operatore.

Per usarlo ho risolto. Grazie della dritta :k:

Ultima modifica effettuata da BugliL il 17/07/2010 alle 0:10
PM Quote