View Full Version : [C++] nome classe variabile
icecube1
25-08-2011, 08:46
in questi giorni ho iniziato a programmare ad oggetti quindi se scrivo cretinate(per non essere volgari) perdonatemi :help: :help: , usavo il c++ come linguaggio procedurale(colpa del profe :doh: ) e ora sono passato ai programmi oop, la logica è diversa non ho ancora capito bene come funziona, ho letto moltissime guide, libri, tutorial online ecc.. ma purtroppo ancora non riesco ad entrare completamente nella logica...:muro: :muro: :muro:
comunque ho iniziato a scrivere qualcosina, :sofico:
ho creato una classe persona che permette di inserire diverse informazioni riguardo ad una persona, funziona tutto bene, però ora vorrei aggiungere un po' di cose, pensavo di chiedere all'inizio all'utente quante persone volesse creare quindi fargliele inserire, ho in mente un metodo ma dubito che funzioni comunque posto il codice:
#include <stdafx.h>
#include <iostream>
#include <string.h>
using namespace std;
class Persona
{
private:
char nome[20];
char cognome[20];
int eta;
char sesso;
public:
Persona()
{
strcpy(nome, "nome");
strcpy(cognome, "cognome");
eta=18;
sesso='n';
}
Persona(char nom[], char cognom[], int et, char sex)
{
strcpy(nome, nom);
strcpy(cognome, cognom);
eta=et;
sesso=sex;
}
void visualizza()
{
cout<<"______________________________________________________________________________";
cout<<"\nNome: "<<nome<<"\nCognome: "<<cognome<<"\nEta: "<<eta<<"\nSesso: "<<sesso<<"\n";
cout<<"_______________________________________________________________________________\n";
}
};
void main()
{
char nom[20];
char cognom[20];
int et, num;
char sex;
cout<<"quante persone vuoi creare? ";cin>>num;
cout<<"inserisci il nome: ";cin>>nom;
cout<<"\ninserisci il cognome: ";cin>>cognom;
cout<<"\ninserisci l'eta': ";cin>>et;
cout<<"\ninserisci il sesso (m/f): ";cin>>sex;
Persona Persona1(nom, cognom, et, sex);
Persona1.visualizza();
system("pause");
}
forse alcune cose potevano essere fatte diversamente per facilitare le cose ma le ho fatte in questo modo o perchè sono inesperto o perchè volevo complicarle un po' per esercitarmi meglio (tipo le variabili in private),..
riguardo al problema di più persone pensavo di fare una cose del genere ma ho forti dubbi che funzioni, è l'unica cosa che mi è venuta in mente:
1-chiedo quante persone;
2-creo ciclo per n persone:
2.1-creo stringa=persona+(indice contatore); (so che con il + con si fa :p )
2.2-creo oggetto con il nome della stringa;
fine ciclo
come potrei fare?
adgatinni
25-08-2011, 10:44
Ma il tuo codice ha dei problemi :
#include <stdafx.h>
Con questo, il tuo codice non è portabile.
#include <string.h>
Se tu programmi in C++, devi utilizzare std::string. string.h e char* sono per il linguaggio C.
void main()
main() deve ritornare un int !
Poi, come potrei fare?
Con un array, un std::vector o un std::list ... ci sono molti modi di fare !
Per esempio:
#include <iostream>
#include <string>
class Persona
{
private:
std::string m_nome;
std::string m_cognome;
unsigned int m_eta;
std::string m_sesso;
public:
Persona()
{
m_nome = "nome";
m_cognome = "cognome";
m_eta = 18;
m_sesso = "n";
}
Persona(std::string nome, std::string cognome, int eta, std::string sesso) : m_nome(nome), m_cognome(cognome), m_eta(eta), m_sesso(sesso)
{
}
void visualizza()
{
std::cout << "\nNome: " << m_nome << "\nCognome: " << m_cognome << "\nEta: " << m_eta << "\nSesso: " << m_sesso << std::endl;
}
};
int main(void)
{
int num = 0, et = 0;
std::string nom, cognom, sex;
Persona* persona = 0;
std::cout << "quante persone vuoi creare? ";
std::cin >> num;
persona = new Persona[num];
for (int i = 0; i < num; ++i)
{
std::cout << "inserisci il nome: ";
std::cin >> nom;
std::cout << "\ninserisci il cognome: ";
std::cin >> cognom;
std::cout << "\ninserisci l'eta': " ;
std::cin >> et;
std::cout<<"\ninserisci il sesso (m/f): ";
std::cin >> sex;
persona[i] = Persona(nom, cognom, et, sex);
}
for (int i = 0; i < num; ++i)
persona[i].visualizza();
delete[] persona;
return 0;
}
icecube1
25-08-2011, 12:15
:sbavvv: :sbavvv: :sbavvv: :sbavvv: :sbavvv: :sbavvv:
ora i miei dubbi si sono aumentati esponenzialmente :cry:
ma <stdafx.h> è l'header che c'è, senza quello mi dà errore...
ah quindi <string> sarebbe di c++ mentre <string.h> C giusto?
pensavo che il c++ integrasse molte funzioni del c :doh:
ma il main perchè non posso lasciarlo void, anche se lo metto come
int main()....return 0;...
non è che poi mi serva a molto
e ultima cosa, ma non è meglio se inserisco using namespace std, almeno non mi tocca riscriverlo per ogni funzione...
adgatinni
25-08-2011, 13:14
ma <stdafx.h> è l'header che c'è, senza quello mi dà errore...
Sì perché hai creato un progetto con headers precompilati. Quando crei un progetto con Visual Studio, devi creare un progetto "vuoto".
ah quindi <string> sarebbe di c++ mentre <string.h> C giusto?
pensavo che il c++ integrasse molte funzioni del c
Tu puoi utilizzare le funzioni del C ma è meglio utilizzare oggetti del C++ perché sono più facile da utilizzare.
ma il main perchè non posso lasciarlo void
perché non è corretto, la norma del C++ dice che main deve ritornare un numero intero.
e ultima cosa, ma non è meglio se inserisco using namespace std, almeno non mi tocca riscriverlo per ogni funzione...
Sì tu puoi ma non mi piace perché se lo facciamo, il namespace non serve a niente.
ESSE-EFFE
25-08-2011, 14:59
Visto che si parlava di OOP, suggerirei, tanto per cominciare, di spostare anche la parte di acquisizione dei dati all'interno della classe Persona.
icecube1
30-08-2011, 04:41
grazie mille per le risposte, ho fatto anche qualche ricerca a riguardo e ho scoperto un sacco di cose interessanti, tipo il motivo per il quale il main deve ritornare un valore (per seganlare un errore) :D :D
Visto che si parlava di OOP, suggerirei, tanto per cominciare, di spostare anche la parte di acquisizione dei dati all'interno della classe Persona.
Hai ragione, non mi è venuto in mente, come ho detto sono agli inizi, grazie mille!!
ho un'altra quesito da proporre, scrivo qui perchè non vorrei intasare il forum
#include <iostream>
#include <string>
using namespace std;
void main()
{
struct dipendente
{
char nome[30];
char cognome[30];
int eta;
int stipendio;
};
int num, chi;
struct dipendente lista[100];
cout<<"Quanti dipendenti ha l'azienda? ";cin>>num;
for(int i=0; i<num; i++)
{
cout<<"\nInserisci il nome del dipendente num "<<i+1<<": ";cin.getline(lista[i].nome, 30, '\n');
cout<<"\nInserisci il cognome: ";cin.getline(lista[i].cognome, '\n');
cout<<"\nInserisci l'eta': ";cin>>lista[i].eta;
cout<<"\nInserisci lo stipendio che percepisce: ";cin>>lista[i].stipendio;
}
cout<<"\n\nQuale dipendente vuoi vedere? ";cin>>chi;
cout<<"\n\nNome: "<<lista[chi].nome;
cout<<"\nCogmone: "<<lista[chi].cognome;
cout<<"\nEta: "<<lista[chi].eta;
cout<<"\nStipendio: "<<lista[chi].cognome;
cout<<endl;
system("pause");
}
questo mi fa strani scherzi :muro:
allora quano lo faccio partire i chiede quanti dipendenti voglio inserire poi dovrebbe chiedermi il nome del dipendente ma non lo fa, mi scrive:
inserisci nome dipendente.....
inserisci il cognome:_
nel senso che scrive il cout del nome ma non me lo lascia inserire e passa subito al cognome e quello me lo lascia inserire, non riesco a capire quale si ail problema, ho fatto dei tentativi modificando cose "collegate" ma come mi aspettavo è stato tutto inutile :mc: :mc:
ops, ho sbagliato e ho risposto 3 volte con la stessa cosa non eramia intenzione :doh:
icecube1
30-08-2011, 04:43
grazie mille per le risposte, ho fatto anche qualche ricerca a riguardo e ho scoperto un sacco di cose interessanti, tipo il motivo per il quale il main deve ritornare un valore (per seganlare un errore) :D :D
Visto che si parlava di OOP, suggerirei, tanto per cominciare, di spostare anche la parte di acquisizione dei dati all'interno della classe Persona.
Hai ragione, non mi è venuto in mente, come ho detto sono agli inizi, grazie mille!!
ho un'altra quesito da proporre, scrivo qui perchè non vorrei intasare il forum
#include <iostream>
#include <string>
using namespace std;
void main()
{
struct dipendente
{
char nome[30];
char cognome[30];
int eta;
int stipendio;
};
int num, chi;
struct dipendente lista[100];
cout<<"Quanti dipendenti ha l'azienda? ";cin>>num;
for(int i=0; i<num; i++)
{
cout<<"\nInserisci il nome del dipendente num "<<i+1<<": ";cin.getline(lista[i].nome, 30, '\n');
cout<<"\nInserisci il cognome: ";cin.getline(lista[i].cognome, '\n');
cout<<"\nInserisci l'eta': ";cin>>lista[i].eta;
cout<<"\nInserisci lo stipendio che percepisce: ";cin>>lista[i].stipendio;
}
cout<<"\n\nQuale dipendente vuoi vedere? ";cin>>chi;
cout<<"\n\nNome: "<<lista[chi].nome;
cout<<"\nCogmone: "<<lista[chi].cognome;
cout<<"\nEta: "<<lista[chi].eta;
cout<<"\nStipendio: "<<lista[chi].cognome;
cout<<endl;
system("pause");
}
questo mi fa strani scherzi :muro:
allora quano lo faccio partire i chiede quanti dipendenti voglio inserire poi dovrebbe chiedermi il nome del dipendente ma non lo fa, mi scrive:
inserisci nome dipendente.....
inserisci il cognome:_
nel senso che scrive il cout del nome ma non me lo lascia inserire e passa subito al cognome e quello me lo lascia inserire, non riesco a capire quale si ail problema, ho fatto dei tentativi modificando cose "collegate" ma come mi aspettavo è stato tutto inutile :mc: :mc:
icecube1
30-08-2011, 04:45
grazie mille per le risposte, ho fatto anche qualche ricerca a riguardo e ho scoperto un sacco di cose interessanti, tipo il motivo per il quale il main deve ritornare un valore (per seganlare un errore) :D :D
Visto che si parlava di OOP, suggerirei, tanto per cominciare, di spostare anche la parte di acquisizione dei dati all'interno della classe Persona.
Hai ragione, non mi è venuto in mente, come ho detto sono agli inizi, grazie mille!!
ho un'altra quesito da proporre, scrivo qui perchè non vorrei intasare il forum
#include <iostream>
#include <string>
using namespace std;
void main()
{
struct dipendente
{
char nome[30];
char cognome[30];
int eta;
int stipendio;
};
int num, chi;
struct dipendente lista[100];
cout<<"Quanti dipendenti ha l'azienda? ";cin>>num;
for(int i=0; i<num; i++)
{
cout<<"\nInserisci il nome del dipendente num "<<i+1<<": ";cin.getline(lista[i].nome, 30, '\n');
cout<<"\nInserisci il cognome: ";cin.getline(lista[i].cognome, '\n');
cout<<"\nInserisci l'eta': ";cin>>lista[i].eta;
cout<<"\nInserisci lo stipendio che percepisce: ";cin>>lista[i].stipendio;
}
cout<<"\n\nQuale dipendente vuoi vedere? ";cin>>chi;
cout<<"\n\nNome: "<<lista[chi].nome;
cout<<"\nCogmone: "<<lista[chi].cognome;
cout<<"\nEta: "<<lista[chi].eta;
cout<<"\nStipendio: "<<lista[chi].cognome;
cout<<endl;
system("pause");
}
questo mi fa strani scherzi :muro:
allora quano lo faccio partire i chiede quanti dipendenti voglio inserire poi dovrebbe chiedermi il nome del dipendente ma non lo fa, mi scrive:
inserisci nome dipendente.....
inserisci il cognome:_
nel senso che scrive il cout del nome ma non me lo lascia inserire e passa subito al cognome e quello me lo lascia inserire, non riesco a capire quale si ail problema, ho fatto dei tentativi modificando cose "collegate" ma come mi aspettavo è stato tutto inutile :mc: :mc:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.