PDA

Visualizza la versione completa : C++ Help classe


Johnny_Firpo
08-07-2009, 18:49
Salve sto preparando l'esame di fondamenti di informatica, mi serviva una mano con un esercizio:

Devo implementare la seguente classe:

class pemployee
{public:
pemployee();
pemployee(string employee_name, double initial_salary);
void set_salary(double new_salary);
double get_salary()const;
string get_name()const;

private:

person person_data;
double salary;


};

dove il dato person è ben definito e la classe person funge alla grande:

class person
{public:
person();
person(string pname, int page);
void get_name() const;

void get_age()const;

private:

string name;
int age;




};



La mia domanda è:
nel costruttore, come devo inizializzare il dato person ??
che significa che la classe pemployee riceve un dato person??

la mia soluzione ovviamente sbagliata è questa:

pemployee::pemployee(string employee_name, double initial_salary)
{



int età;

person_data(employee_name,età); //??
salary=initial_salary;

}

shodan
08-07-2009, 18:56
Se non hai necessità di cambiare il nome alla persona puoi semplicemente fare:


pemployee::pemployee(string employee_name, double initial_salary) {

int età = 3000;
person_data = person(employee_name,età);
salary=initial_salary;

}

Johnny_Firpo
08-07-2009, 18:58
cacchio grazie!!

Johnny_Firpo
08-07-2009, 19:48
Mi serve un altro favore:


Come faccio nel main ad automatizzare la costruzione n persone??
cioè, io leggo n, n nomi, n età da standard input, poi come faccio per costruire n oggetti persona?


si puo usare il costruttore o devo usare una funzione?


grazie mille

shodan
08-07-2009, 20:02
Devi usare il costruttore.


vector <person> persone.
for ( ... ) {
// acquisizione dati.
persone.push_back(person(nome,eta));
}

Johnny_Firpo
08-07-2009, 20:06
è la stessa cosa con l'array??

e tu con push_back() intendi una funzione della classe vector??


non c'è una soluzione senza funzioni ausiliarie?

shodan
08-07-2009, 20:14
Il principio è lo stesso. Il container usato è solo un dettaglio.


non c'è una soluzione senza funzioni ausiliarie?

Senza sapere a priori il numero di elementi da inserire, no.
Lo stesso vale per un C array.

LeleFT
09-07-2009, 08:38
@Johnny_Firpo: quando posti del codice, cerca di utilizzare i tag CODE, come indicato nel regolamento di quest'area (http://forum.html.it/forum/showthread.php?s=&threadid=973887) al punto 6.

PS: complimenti per il nick :)


Ciao. :ciauz:

Johnny_Firpo
09-07-2009, 17:10
chiedo scusa!!

volevo dire che ho trovato una soluzione alla mia domanda.

è possibile leggere automaticamente degli oggetti da standard input, vi posto l'esempio.
non si sa mai, dovrebbe servire...






#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;

int N;

class nazione
{
public:

nazione();
nazione(string n,int sup, int pop, int dens);
void most_sup(nazione cont[N]);
void most_pop(nazione cont[N]);
void most_dens(nazione cont[N]);
private:

string nome;
int superficie;
int popolazione;
int densita;
};

nazione::nazione()
{

nome="";
superficie=0;
popolazione=0;
densita=0;


}

nazione::nazione(string n,int sup, int pop, int dens)
{
nome=n;
superficie=sup;
popolazione=pop;
densita=dens;

}

/*
Una possibile soluzione, è passargli una sequenza di nazioni, e farle analizzare

*/
void nazione::most_sup(nazione cont[])
{
int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].superficie > big.superficie)
big=cont[i];

}

cout<<"La nazione più estesa è :"<<big.nome;

}


void nazione::most_pop(nazione cont[])
{

int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].popolazione > big.popolazione)
big=cont[i];

}

cout<<"La nazione più popolosa è:"<<big.nome;

}


void nazione::most_dens(nazione cont[]) // N non va rimesso nella definizione della funzione
{

int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].densita > big.densita)
big=cont[i];

}

cout<<"La nazione più densamente abitata è :"<<big.nome;
}




int main()
{
cout<<"inserisci quante nazioni su cui fare il calcolo : "<<'\n';
cin>>N;
nazione c[N];
string n;
int s,p,d;

for(int i=0; i<N; i++)
{
cout<<"inserisci nome : "<<'\n';
cin>>n;
cout<<"inserisci superficie, popolazione, densità di "<<n<<'\n';
cin>>s;
cin>>p;
cin>>d;
c[i]=nazione(n,s,p,d);

}

nazione i;
i.most_sup(c);
i.most_pop(c);
i.most_dens(c);

}



dovrebbe essere la stessa cosa per l'esempio di sopra.

grazie a tutti per la disponibilità,

mi rifarò vivo, perchè la settimana prossima ho l'esame :(

Stoicenko
09-07-2009, 17:43
in c e c++ non si possono dichiarare array di dimensioni non conosciute a quel modo.. usa la malloc o la new

attento che ci sono altri errori nel codice

questo compila:



#include<iostream>
#include<cstdlib>
#include<string>

using namespace std;

int N;

class nazione
{
public:

nazione();
nazione(string n,int sup, int pop, int dens);
void most_sup(nazione cont[]);
void most_pop(nazione cont[]);
void most_dens(nazione cont[]);
private:

string nome;
int superficie;
int popolazione;
int densita;
};

nazione::nazione()
{

nome="";
superficie=0;
popolazione=0;
densita=0;


}

nazione::nazione(string n,int sup, int pop, int dens)
{
nome=n;
superficie=sup;
popolazione=pop;
densita=dens;

}

/*
Una possibile soluzione, è passargli una sequenza di nazioni, e farle analizzare

*/
void nazione::most_sup(nazione cont[])
{
int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].superficie > big.superficie)
big=cont[i];

}

cout<<"La nazione più estesa è :"<<big.nome;

}


void nazione::most_pop(nazione cont[])
{

int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].popolazione > big.popolazione)
big=cont[i];

}

cout<<"La nazione più popolosa è:"<<big.nome;

}


void nazione::most_dens(nazione cont[]) // N non va rimesso nella definizione della funzione
{

int i;
nazione big;
big=cont[0];

for(i=0;i<N;i++)
{

if(cont[i].densita > big.densita)
big=cont[i];

}

cout<<"La nazione più densamente abitata è :"<<big.nome;
}




int main()
{
cout<<"inserisci quante nazioni su cui fare il calcolo : "<<'\n';
cin>>N;
nazione* c = (nazione*)malloc(sizeof(nazione)*N);
string n;
int s,p,d;

for(int i=0; i<N; i++)
{
cout<<"inserisci nome : "<<'\n';
cin>>n;
cout<<"inserisci superficie, popolazione, densità di "<<n<<'\n';
cin>>s;
cin>>p;
cin>>d;
c[i]=nazione(n,s,p,d);

}

nazione i;
i.most_sup(c);
i.most_pop(c);
i.most_dens(c);

}

Loading