Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-08-2011, 08: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, 10: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, 12: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, 13: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, 14: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, 04: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, 04: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, 04: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


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
Windows 11 è diventato più...
Apple cambia strategia a causa della cri...
007 First Light: uscita rimandata di due...
Samsung Galaxy A37 e A57: il comparto fo...
DAZN lancia la sua offerta di Natale: My...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Le feste non placano Amazon, anzi: aggio...
Roborock Q10 S5+ a un super prezzo: robo...
Formula sceglie WINDTRE BUSINESS per gar...
EXPO 1.20: AMD migliora il supporto all'...
MacBook Pro con chip M4, 24GB di RAM e 1...
Lefant M330 da 6.000Pa a 139€ o ECOVACS ...
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: 02:31.


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