Programmazione ad Oggetti C++

di il
7 risposte

Programmazione ad Oggetti C++

Buongiono ragazzi!
Sono un ragazzo che studia informatica all'univerisita ed il primo anno abbiamo svolto la programmazione procedurale con il C++/C avendo conseguito delle discrete competenze in C/C++ ho pensato di portarmi avanti e di passare alla programmazione ad oggetti (che verrà svolta quest'anno in java).
Vorrei ultimare le mie conoscenze in C++ imparando a programmare anche ad Oggetti per fare programmini non più giocattolosi !
La mia domanda riguarda i costruttori!
Nella dichiarazione di una classe dopo il metodo public va dichiarato un costruttore (se non viene dichiarato, il compilatone ne genera uno lui).
Nella compilazione da terminale con il compilatore g++ di linux avevo dei problemi a compilare perchè sbagliavo a dichiarare il costruttore , ora come ora ho risolto il problema ma ancora non mi spiego perchè va fatto in questo modo! Ho cercato degli esempi di dichiarazione di un costruttore su internet e ho notato che vanno dichiarati due costruttori!
MI spiego meglio nel codice!
//File persone.h

#include <iostream>
#include <string>
using namespace std;

class Persona{
	public:
		//Costruttori
		Persona(); // Costruttore semplice
		Persona(string nome, string cognome, int eta);

		/* Io prima avevo dichiarato solo il costruttore
			Persona(string nome, string cognome, int eta);
			ed il compilatore mi dava un errore che non riusciva a trovare Persone::Persone(...);*/
	private:
		string nome;
		string cognome;
		int eta;

};


File persone.cpp

#include "persone.h"

// Proviamo a fare il costruttore

Persona::Persona(){
	nome = " ";
	cognome = " ";
	eta = 0;
}

// Prima dichiaravo solo questo con una modifica nel corpo.
Persona::Persona(string nome, string cognome, int eta){
	// prova di compilazione
	cout << "****** Prova di compilazione Costruttore" << endl;
	nome = nome;   // dichiaravo nome = " ";
	cognome = cognome;  // stesso discorso
	eta = eta;   // eta = 0;
}


file primario.cpp

#include <iostream>
#include "persone.h"
using namespace std;
int main(){
	Persona person;  // qui non facevo altro che preallocare spazio per la classe nell heap!
	// e il copilatore mi ritornava l'errore che ho descritto prima
	return 0;
}
Ripeto il mio dubbio sul perchè ho dovuto dichiarare i due Costruttori.
Vi ringrazio in anticipo e vi auguro una buona giornata.

Ps: Spero che la mia domanda e il mio post siano stati chiari!

7 Risposte

  • Re: Programmazione ad Oggetti C++

    Il punto è che facendo
       Persona person;  // qui non facevo altro che preallocare spazio per la classe nell heap!
    
    in realtà richiami il costruttore Persona().
    Se non vuoi che ti venga richiamato il costruttore, usa un puntatore
    Persona *pperson;
    e allochi/crei l'oggetto con new in un momento successivo.
  • Re: Programmazione ad Oggetti C++

    candaluar ha scritto:


    Il punto è che facendo
       Persona person;  // qui non facevo altro che preallocare spazio per la classe nell heap!
    
    in realtà richiami il costruttore Persona().
    Se non vuoi che ti venga richiamato il costruttore, usa un puntatore
    Persona *pperson;
    e allochi/crei l'oggetto con new in un momento successivo.
    Perfetto ma perchè se io voglio usare il costruttore con argomenti devo per forza dichiarare anche quello senza argomenti??
    Perchè li devo dichiarare entrambi?
    e perchè nel corpo del costruttore va dichiarato nel seguente modo e non come avevo fatto io??
    Persona::Persona(string nome, string cognome, int eta){
    	// prova di compilazione
    	cout << "****** Prova di compilazione Costruttore" << endl;
    	nome = nome;   // dichiaravo nome = " ";
    	cognome = cognome;  // stesso discorso
    	eta = eta;   // eta = 0;
    }
  • Re: Programmazione ad Oggetti C++

    Il costruttore senza argomenti ti viene richiesto perchè fai:
    Persona person; 
    Se tu fai
    Persona *pperson; 
    non ti verrà richiesto.
    Attenzione al costruttore con parametri, scrivilo così
    Persona::Persona(string _nome, string _cognome, int _eta){
       // prova di compilazione
       cout << "****** Prova di compilazione Costruttore" << endl;
       nome = _nome;   // dichiaravo nome = " ";
       cognome = _cognome;  // stesso discorso
       eta = _eta;   // eta = 0;
    }
  • Re: Programmazione ad Oggetti C++

    candaluar ha scritto:


    Il costruttore senza argomenti ti viene richiesto perchè fai:
    Persona person; 
    Se tu fai
    Persona *pperson; 
    non ti verrà richiesto.
    Attenzione al costruttore con parametri, scrivilo così
    Persona::Persona(string _nome, string _cognome, int _eta){
       // prova di compilazione
       cout << "****** Prova di compilazione Costruttore" << endl;
       nome = _nome;   // dichiaravo nome = " ";
       cognome = _cognome;  // stesso discorso
       eta = _eta;   // eta = 0;
    }

    Perfettissimo! Grazie mille! e Scusami un ultima domanda, la scrittura _nome e una convenzione di stile??
  • Re: Programmazione ad Oggetti C++

    la scrittura _nome e una convenzione di stile?
    No, non è una convenzione; al riguardo, ho trovato un thread interessante
  • Re: Programmazione ad Oggetti C++

    Puoi anche scrivere

    Persona::Persona(string nome, string cognome, int eta){

    e poi

    this.nome = nome;

    e così via ...
  • Re: Programmazione ad Oggetti C++

    cazyjoker96 ha scritto:


    ..la scrittura _nome e una convenzione di stile??
    Diciamo che è meglio seguire sempre la stessa regola, specialmente se poi il tuo codice deve essere letto da altri.
    Ad esempio puoi usare pNome (che io ricordi molto utilizzato in ambito Java style) per il parametro del costruttore e rimanere nome per il membro della classe, oppure usare m_Nome per il membro della classe e rimanere nome per il parametro del costruttore, oppure ancora usare un ibrido delle due soluzioni.
    La cosa fondamentale è eliminare l'ambiguidà ed avere delle best practices comuni nella stesura del codice specialmente se lavori con altre persone che prima o poi dovranno mettere mano al tuo codice.
    Sicuramente in questo modo si facilita di molto la lettura del codice e si ha uno standard.
    (Tieni in mente che in genere ogni azienda degna di questo nome si dà delle linee guida di base per la scrittura del codice).
    Ciao
Devi accedere o registrarti per scrivere nel forum
7 risposte