Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    15

    [C++][OOP Basics] Problema con costruttore

    Buongiorno,

    sono anni che non tocco C++ potreste gentilmente dirmi dove sbaglio? Ho riletto più volte il codice, concettualmente mi sembra tutto giusto..

    codice:
    #include <iostream>
    using namespace std;
    
    
    class Dipendente {
    
    
        char nome[16];
        char cognome[16];
        char sigla[2];
    
    
        Dipendente(char cnome[16], char ccognome[16], char csigla[2]) {
            nome = cnome;
            cognome = ccognome;
            sigla = csigla;
        }
    
    
        void printDati() {
            cout << nome << " " << cognome << " " << sigla;
        }
    }
    
    
    int main()
    {
        d1 = Dipendente("Pinco", "Palla", "PP");
        d1.printDati();
    }
    "Non sono stupido, sono ignorante!"

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,389
    Invece è sbagliato. Per copiare asciiz string devi usare la strcpy (o le varianti più sicure tipo strncpy).
    codice:
        Dipendente(char cnome[16], char ccognome[16], char csigla[2]) {
            strcpy(nome,cnome);
            ...
    }
    Anche se parlando di C++ è meglio usare std::string.
    https://en.cppreference.com/w/cpp/string/basic_string
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    15
    Ti ringrazio per il tuo veloce riscontro. Purtroppo con il tuo accorgimento ho solo diminuito gli errori ma sono sempre troppi:

    codice:
    #include <iostream>
    using namespace std;
    
    
    class Dipendente {
    
    
        char nome[16];
        char cognome[16];
        char sigla[2];
    
    
        Dipendente(char cnome[16], char ccognome[16], char csigla[2]) {
            strcpy(nome, cnome);
            strcpy(cognome, ccognome);
            strcpy(sigla, csigla);
        }
    
    
        void printDati() {
            cout << nome << " " << cognome << " " << sigla;
        }
    }
    
    
    main()
    {
        d1 = Dipendente("Pinco", "Palla", "PP");
        d1.printDati();
    }
    "Non sono stupido, sono ignorante!"

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,389
    Ovviamente dev'essere:
    codice:
    Dipendente d1 = Dipendente("Pinco", "Palla", "PP");
    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
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    15
    Si nel frattempo avevo corretto anche quello ma non basta...

    codice:
    #include <iostream>
    using namespace std;
    
    
    class Dipendente {
    
    
        char nome[16];
        char cognome[16];
        char sigla[2];
    
    
        Dipendente(char cnome[16], char ccognome[16], char csigla[2]) {
            strcpy(nome, cnome);
            strcpy(cognome, ccognome);
            strcpy(sigla, csigla);
        }
    
    
        void printDati() {
            cout << nome << " " << cognome << " " << sigla;
        }
    }
    
    
    main()
    {
        Dipendente d1 = Dipendente("Pinco", "Palla", "PP");
        d1.printDati();
    }
    "Non sono stupido, sono ignorante!"

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,389
    Continui a dire che hai errori, ma non dici che errori hai. Mica siamo il mago Otelma qui
    Comunque ripassa gli specificatori di accesso (public, protected, private), visto che tutto in quella classe è privato.
    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.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    15
    Pensavo fosse una cosa basica da copia incolla sul editor..

    Cmq ho risolto cambiamento completamente approccio:

    codice:
    #include <iostream>
    using namespace std;
    
    
    class Dipendente {
    
    
    private:
    
    
        string nome, cognome, sigla;
    
    
    public:
    
    
        Dipendente(string cnome, string ccognome, string csigla);
        void printDati();
    };
    
    
    Dipendente::Dipendente(string cnome, string ccognome, string csigla) {
        this->nome = cnome;
        this->cognome = ccognome;
        this->sigla = csigla;
    }
    
    
    void Dipendente::printDati() {
        cout << nome << cognome << sigla;
    }
    
    
    int main() {
        Dipendente d1 = Dipendente("Pinco", "Palla", "PP");
        d1.printDati();
    }
    Grazie mille comunque
    "Non sono stupido, sono ignorante!"

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 © 2020 vBulletin Solutions, Inc. All rights reserved.