In riferimento alla vecchia discussione [C++] Istanziare un oggetto ringrazio oregon per avermi dato la sua risposta ma il mio dubbio comunque rimane. Il concetto di puntatore credo di averlo più che chiaro, anche se forse sembra di no.
Provengo da un lungo periodo di programmazione in Java, quindi ho sempre istanziato un oggetto in questo modo:
Oggetto o = new Oggetto();
Inoltre so che se in Java voglio referenziare un oggetto faccio Oggetto o1 = o. Così o1 punta ad o (se vogliamo metterla in termini di puntatori).
A quanto capisco, in c++ ci sono due (o più?) modi per istanziare un oggetto, ma non capisco quando va usato uno e quando l'altro. Ho capito "solo se ho un puntatore a un oggetto", ma ad esempio, se ho la seguente classe:
Persona.cpp
codice:
#include "Persona.h"
string nome;
string cognome;
Persona::Persona(string n, string c) {
this->nome=n;
this->cognome=c;
}
string Persona::get_nome(){
return nome;
}
string Persona::get_cognome(){
return cognome;
}
Persona::~Persona() {}
e Persona.h è così definito:
codice:
#ifndef PERSONA_H_
#define PERSONA_H_
#include <string>
using namespace std;
class Persona {
private:
string nome;
string cognome;
public:
Persona(string n, string c);
string get_nome();
string get_cognome();
virtual ~Persona();
};
#endif /* PERSONA_H_ */
Se voglio testare la classe Persona, creo un file main.cpp con il seguente contenuto:
codice:
#include "objects/Persona.h"
#include <iostream>
int main(){
Persona* p = new Persona("Pippo", "Pluto");
cout << "Nome: " << p->get_nome() << endl;
cout << "Cognome: " << p->get_cognome() << endl;
}
Ora la domanda è: sì fa sempre così? Si usa sempre l'operatore new? Ci sono altri modi?
Quando si fa in un modo piuttosto che in un altro?
Grazie.