Newsgroup: it.comp.lang.c++
Titolo: Come creo un array di oggetti di una classe da me creata?

Ho provato a creare una classe persona da cui derivano le classi studente e
docente. Ho creato una classe facoltà al cui interno volevo mettere un array
di studenti e un array di docenti, solo che se provo a compilare la classe
facolta mi viene detto che non ci sono metodi adatti per creare l'array. Le
classi Studente e Docente funzionano correttamente, lo ho già provate. Come
potrei far funzionare la classe facoltà?
Qua vi passo le classi Studente, Docente e Facoltà.
Grazie.
Student class:
#pragma once
#include "persona.h"
#include "String.h"
class Studente :
public Persona
{
public:
Studente(String, String, String, int, long);
Studente(Studente &);
Studente(Persona, long);
long getMatricola();
void print();
~Studente(void);
protected:
const long matricola;
};
#include "StdAfx.h"
#include ".\studente.h"
#include <iostream>
using namespace std;
Studente::Studente(String nome, String cognome, String codfisc, int eta,
long matr):Persona(nome, cognome, codfisc, eta), matricola(matr)
{
}
Studente::Studente(Persona p, long matr):Persona(p), matricola(matr){
}
long Studente::getMatricola(){
return matricola;
}
Studente::Studente(Studente &s):Persona(s.nome, s.cognome, s.codFisc,
s.eta), matricola(s.matricola){
}
void Studente::print(){
Persona::print();
cout<<matricola<<endl;
}
Studente::~Studente(void)
{
}
Teacher class:
#include "StdAfx.h"
#include ".\docente.h"
#include <iostream>
using namespace std;
Docente::Docente(String nome, String cognome, String codfisc, int eta, int
as, int stipendio, long cod, String laurea, String insegnamento, String
ruolo):Impiegato(nome, cognome, codfisc, eta, as, stipendio, cod)
{
setLaurea(laurea);
setInsegnamento(insegnamento);
setRuolo(ruolo);
}
Docente::Docente(Impiegato i, String laurea, String insegnamento, String
ruolo):Impiegato(i){
setLaurea(laurea);
setInsegnamento(insegnamento);
setRuolo(ruolo);
}
void Docente::setLaurea(String lau){
laurea=lau;
}
void Docente::setInsegnamento(String ins){
insegnamento=ins;
}
void Docente::setRuolo(String ruo){
ruolo=ruo;
}
String Docente::getLaurea(){
return laurea;
}
String Docente::getInsegnamento(){
return insegnamento;
}
String Docente::getRuolo(){
return ruolo;
}
void Docente::print(){
Impiegato::print();
cout<<"Laurea conseguita: ";
laurea.print();
cout<<"Insegnamento: ";
insegnamento.print();
cout<<"Incarico (titolare o assistente): ";
ruolo.print();
}
Docente::~Docente(void)
{
}
University class:
#pragma once
#include "Docente.h"
#include "Studente.h"
class Facolta
{
public:
Facolta(String);
Facolta(int, int, int, String);
void setStudente(int, Studente);
void setDocente(int, Docente);
void setFacolta(String);
String getFacolta();
Studente getStudente();
Docente getDocente();
~Facolta(void);
private:
String facolta;
int ns, nd;
Studente *sPtr;
Docente *dPtr;
;
};
#include "StdAfx.h"
#include ".\facolta.h"
#include "Studente.h"
#include "Docente.h"
#include "Amministrativo.h"
Facolta::Facolta(String nome)
{
setFacolta(nome);
ns=0;
nd=0;
sPtr=NULL;
dPtr=NULL;
}
Facolta::Facolta(int s, int d, String nome){
setFacolta(nome);
nd=d;
ns=s;
sPtr=new Studente[ns];
dPtr=new Docente[nd];
}
void Facolta::setFacolta(String nome){
facolta=nome;
}
Facolta::~Facolta(void)
{
}

 Grazie.
Perchè hai implementato solo costruttori 'particolari', ovvero che 
prendono *obbligatoriamente* qualche parametro.
Aggiungi i costruttori come:
Studente();
Docente();
e gli eventuali altri (ho letto molto velocemente il tuo codice); 
ovviamente devi preoccuparti di creare i metodi Set() con cui settare le 
variabili membro, cosa che ora fai direttamente con i costruttori 
implementati.
Una seconda soluzione sarebbe quella di creare un array di Persona * e 
ritardare il bind in fase di esecuzione, una roba tipo:
std::vector<Persona *> _soggetti;
Persona * Nuovo = New Studente( con tutti i parametri );
_soggetti.push_back( Nuovo );
// NON DIMENTICARE DI DEALLOCARE TUTTI I PUNTATORI NEL DISTRUTTORE DELLA 
CLASSE FACOLTA
Se ho detto castronerie ci sarà chi mi farà arrossire e ti darà nuove 
dritte....
Ciao,
j0k3r

 #include "StdAfx.h"
Mi pare di capire che utilizzi gli header precomiplati, questo non è 
portabile e non ha niente a che vedere con il C++.
Quando crei un progetto puoi selezionare se utilizzarli o meno, te cerca 
di evitare.

 
???
Come sarebbe a dire non sono portabili? Io credevo di sě...
qui sopra č StdAfx.h che č peculiare di MFC, ma che sia
precompilata o meno non credo sia questione di standard.
Voglio dire, se un compilatore non supporta la direttiva
#pragma hdrstop corrispondente agli header precompilati
semplicemente la ignora, quindi il problema non sussiste.