PDA

View Full Version : [C++] Header e direttiva using


masteryuri
31-05-2011, 15:58
Sto progettando una classe Persona.

Ho il seguente header:


#ifndef PERSONA_H
#define PERSONA_H

#include <iostream>
using namespace std;
class Persona
{
friend istream& operator >> (istream& in, Persona& P);
friend ostream& operator << (ostream& out, const Persona& P);

public:
Persona();
Persona(const Persona &);
Persona(const string, const string, int);
const Persona& operator = (const Persona&);
const string getN() const { return Nome; };
const string getC() const { return Cognome; };;
const int getE() const { return Eta; };
~Persona();

private:
string Nome;
string Cognome;
int Eta;
};

#endif


E la seguente implementazione:


#include <iostream>
#include "Persona.h"

using namespace std;

Persona::Persona() : Eta(0) {}
Persona::Persona(const Persona & P) : Nome(P.getN()), Cognome(P.getC()), Eta(P.getE()) {}
Persona::Persona(const string N, const string C, int E) : Nome(N), Cognome(C), Eta(E) {}

Persona::~Persona()
{
Nome.clear();
Cognome.clear();
}

const Persona& Persona::operator = (const Persona& P)
{
if(this!=&P)
{
Nome = P.getN();
Cognome = P.getC();
Eta=P.getE();

return *this;
}
}

ostream& operator << (ostream& out, const Persona& P)
{
out << P.Nome << " " << P.Cognome << " " << P.Eta << " anni" << endl;
return out;
}

istream& operator >> (istream& in, Persona& P)
{
cout << "Inserire Nome: "; getline(in,P.Nome);
cout << "Inserire Cognome: "; getline(in,P.Cognome);
cout << "Inserire età: "; in >> P.Eta;

return in;
}


Mi è stato consigliato di non usare mai la direttiva
using namespace std;
in un header file.
Come posso rimuovere la direttiva adattando il codice di conseguenza?

tomminno
31-05-2011, 16:58
Nell'header metti std:: davanti a tutte le classi del namespace standard


Persona(const std::string, const std::string, int);


Un consiglio, secondo me sarebbe meglio usare le reference:


Persona(const std::string &, const std::string &, int);

const std::string & getN() const { return Nome; };

masteryuri
31-05-2011, 17:15
D'accordo, grazie mille ;)
Perché le reference?

tomminno
01-06-2011, 08:45
D'accordo, grazie mille ;)
Perché le reference?

Perchè altrimenti passi una copia della stringa

masteryuri
02-06-2011, 02:22
Ok grazie ancora :)