Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    6

    [C++] problema costruttore di copia

    Ciao ragazzi non riesco a capire perchè non mi funziona il costruttore di copia...posto il codice;
    questo è l'header
    codice:
    #ifndef _FIORE_
    #define _FIORE_
    #include <iostream>
    const int DIM=50;
    using namespace std;
    
    class Fiore{
          private:
          char* nome;
          char colore[DIM];
          int num_petali;
          public:
          Fiore(char*nm="",char*cl="" ,int nmp=0);
          Fiore(const Fiore & );
          const char* get_nome() const {return nome;}
          void set_nome(const char* buffer) {delete [] nome;nome=new char[strlen(buffer)+1];strcpy(nome,buffer);}
          const char* get_colore()const {return colore;}
          void set_colore(const char* c) {strcpy(colore,c);}
          int get_num_petali() const {return num_petali;}
          void set_num_petali(int n) {num_petali=n;}
          ~Fiore() {cout << "\n distruttore chiamato!"; delete [] nome;}
        //  friend Fiore operator+(const Fiore&,const Fiore& );
          
    };
    
    Fiore operator+(const Fiore&,const Fiore& );
    #endif
    
    
    il .cpp
    
    #include "fiore2.h"
    
    Fiore::Fiore(char*n,char*c ,int np)
    {
                               cout<<"\nCostruttore chiamato";
                               nome=new char[strlen(n)+1];
                               strcpy(nome,n);
                               strcpy(colore,c);
                               num_petali=np;
                               
    }
    
    Fiore::Fiore(const Fiore & f){
                       cout<<"\ncostruttore di copia chiamato";
                       num_petali=f.num_petali;
                       strcpy(colore,f.colore);
                       nome=new char[strlen(f.nome)+1];
                       strcpy(nome,f.nome);
                       
                       
    
    
    
    }
    
    Fiore operator+(const Fiore& f1,const Fiore& f2){
          Fiore Result;
          Result.set_nome(f1.get_nome());
          Result.set_num_petali(f1.get_num_petali()+ f2.get_num_petali());
          Result.set_colore(f1.get_colore());
          return Result;
    }
    
    
    
    
    
    e il main
    
    #include <cstdlib>
    #include <iostream>
    #include "fiore2.h"
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        Fiore f1("viola","rossa",3),f2;//("geraneo","verde",4);
        f1.set_nome("rosa");
        f2=f1;
       // Fiore C=f1+f2;
      //  cout<<C.get_num_petali();
        
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte che devi inserire il codice tra i tag CODE (altrimenti si capisce poco), che vuoi dire con "non funziona"?

    Spiega un po' meglio la situazione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    6
    intendo dire che mi usa il costruttore di copia di default visto che non mi stampa all'atto di un'assegnazione nel main "costruttore di copia chiamato"

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [C++] problema costruttore di copia

    Originariamente inviato da gasga

    f2=f1;
    Stai invocando l'operatore di copia (che non c'è), non il costruttore di copia.
    Il costruttore di copia è invocato qui:
    codice:
        Fiore f1("viola","rossa",3);
        f1.set_nome("rosa");
        Fiore f2=f1;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    È normale che non venga richiamato, nel main hai un assegnamento, non un'inizializzazione... Se tu l'avessi ridefinito verrebbe richiamato il tuo operator=.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    6

    Re: Re: [C++] problema costruttore di copia

    Originariamente inviato da shodan
    Stai invocando l'operatore di copia (che non c'è), non il costruttore di copia.
    Il costruttore di copia è invocato qui:
    codice:
        Fiore f1("viola","rossa",3);
        f1.set_nome("rosa");
        Fiore f2=f1;
    grazie! ho capito.Ho un altro problema..non mi funziona se faccio una cosa del tipo
    codice:
     Fiore C=f1+f2;
    come mai?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.