Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale
La prima tappa italiana della Road to CES porta a Milano i vertici della Consumer Technology Association, con una nuova griglia di lettura dei trend tecnologici e una posizione netta su dazi e regolamentazione dell'IA
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
OPPO ha appena lanciato sul mercato la nuova serie Find X10, che ha come smartphone premium il Find X10 Pro Max, uno smartphone completo, che fa del comparto fotografico il suo vero punto di forza. Ma sono tante le novità, tra cui l'AI che adesso diventa agentica. Ma andiamo a vedere nel dettaglio questo nuovo smartphone.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-08-2011, 07:46   #1
icecube1
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 12
[C++] nome classe variabile

in questi giorni ho iniziato a programmare ad oggetti quindi se scrivo cretinate(per non essere volgari) perdonatemi , usavo il c++ come linguaggio procedurale(colpa del profe ) 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...

comunque ho iniziato a scrivere qualcosina,
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:

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 )
2.2-creo oggetto con il nome della stringa;
fine ciclo

come potrei fare?
icecube1 è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2011, 09:44   #2
adgatinni
Junior Member
 
Iscritto dal: Aug 2011
Città: Francia
Messaggi: 5
Ma il tuo codice ha dei problemi :

Codice:
#include <stdafx.h>
Con questo, il tuo codice non è portabile.

Codice:
#include <string.h>
Se tu programmi in C++, devi utilizzare std::string. string.h e char* sono per il linguaggio C.

Codice:
void main()
main() deve ritornare un int !

Poi,
Quote:
come potrei fare?
Con un array, un std::vector o un std::list ... ci sono molti modi di fare !

Per esempio:

Codice:
#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;
}
adgatinni è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2011, 11:15   #3
icecube1
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 12


ora i miei dubbi si sono aumentati esponenzialmente

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

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...
icecube1 è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2011, 12:14   #4
adgatinni
Junior Member
 
Iscritto dal: Aug 2011
Città: Francia
Messaggi: 5
Quote:
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".

Quote:
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.

Quote:
ma il main perchè non posso lasciarlo void
perché non è corretto, la norma del C++ dice che main deve ritornare un numero intero.

Quote:
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.
adgatinni è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2011, 13:59   #5
ESSE-EFFE
Member
 
Iscritto dal: May 2009
Messaggi: 186
Visto che si parlava di OOP, suggerirei, tanto per cominciare, di spostare anche la parte di acquisizione dei dati all'interno della classe Persona.
__________________
ESSE-EFFE.com
Sviluppo software e Web
Creazione loghi - Bergamo
ESSE-EFFE è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2011, 03:41   #6
icecube1
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 12
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)

Quote:
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

Codice:
#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
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


ops, ho sbagliato e ho risposto 3 volte con la stessa cosa non eramia intenzione
icecube1 è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2011, 03:43   #7
icecube1
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 12
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)

Quote:
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

Codice:
#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
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
icecube1 è offline   Rispondi citando il messaggio o parte di esso
Old 30-08-2011, 03:45   #8
icecube1
Junior Member
 
Iscritto dal: Apr 2010
Messaggi: 12
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)

Quote:
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

Codice:
#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
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
icecube1 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato WoW Forever provato: il MMORPG che la community ...
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
NordVPN anticipa il Black Friday: sconti...
HPE Spaceborne Computer-4: calcolo ad al...
500 chilometri in soli 5 minuti: la rica...
CATL e BAIC puntano a un milione di auto...
La Svezia blocca ChatGPT e Claude sui co...
La NASA ha tenuto una conferenza sulle f...
Galaxy S27 Ultra, spunta la batteria in ...
Google Maps porta l'intelligenza artific...
Una foto troppo perfetta può costare car...
Caldo in Europa, oltre 50.000 morti stim...
Il low cost spopola su Amazon: 7 offerte...
HP Envy 6120e a 49,90€ su Amazon: stampa...
Dove finiscono le ore che l’IA fa rispar...
Radiatori a olio in offerta su Amazon: M...
Tlc, l'occupazione crolla al minimo stor...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v