Salve ragazzi, ho una perplessità sull'utilizzo dei puntatori:
Ultimamente ho creato un programmino che permetti di:
1) Inserire clienti
2) Ricercare un cliente
Adesso ho creato una classe Client che aveva i seguenti attributi e metodi:
cliente.h
codice:class Client { private: string Name; string Surname; int Age; public: Client(string Name, string Surname, int Age); void setName(string Name); void setSurname(string Surname); void setAge(int Age); string getName(); string getSurname(); int getAge(); };
Mentre quest'altro è il file .cpp
codice:// Funzione InsertClient: Funzione che mi permette di inserire un cliente void InsertClient(Client** tmp, int &i) { string name, surname; int age; cout << "This is the client number: " << i + 1 << endl; cout << "Insert Name: " << endl; cin >> name; cout << "Insert Surname: " << endl; cin >> surname; cout << "Insert Age: " << endl; cin >> age; *tmp = new Client(name, surname, age); } // Funzione Menu: Funzione che mi permette di gestire le operazioni dell'applicazione bool Menu (Client* clients[], int &i) { int request; cout << "\n\t1. Inserisci cliente: " << endl; cout << "\t2. Cerca cliente: " << endl; cout << "\t0. Esci: " << endl; cin >> request; switch(request) { case 1: { InsertClient(&clients[i], i); i++; break; } case 2: { string parameter; cout << "\nSurname of client: " << endl; cin >> parameter; bool flag = true; for (int j = 0; j < i; j++) { if (parameter == clients[j]->getSurname()) { cout << "\nID client:\t" << j + 1; cout << "\nName\t:" << clients[j]->getName(); cout << "\nSurname\t:" << clients[j]->getSurname(); cout << "\nAge:\t" << clients[j]->getAge() << endl; flag = false; break; } } if (flag == true) cout << "The client " << parameter << " don't exist! Try agin please"; break; } case 0: { cout << "Arrivederci"; return false; } default: cout << "Scelta sbagliata"; } return true; } // Inizializzo il costruttore Client::Client(std::string Name, std::string Surname, int Age) { this->Name = Name; this->Surname = Surname; this->Age = Age; } // Le altre funzioni metodi set e get void Client::setName(std::string Name) { this->Name = Name; } void Client::setSurname(std::string Surname) { this->Surname = Surname; } void Client::setAge(int Age) { this->Age = Age; } string Client::getName() { return Name; } string Client::getSurname() { return Surname; } int Client::getAge() { return Age; } // Enter Point (MAIN) int main(int argc, char* argv[]) { Client* clients[100]; int i = 0; // Numero iniziale di clienti while (Menu(clients, i)); // loop per il menu return 0; }
Premetto che il programma funziona, però adesso vorrei capire una cosa:
Come mai devo dichiarare per forza un array di puntatori anziche un semplice array di tipo Client?
Oggi ho provato a passare alla funzione InsertClient, solamente l'elemento da riempire nell'array, ma mi dava errore.
La mia domanda è: Perchè utilizzare per forza un array di puntatori? e teoricamente come funzionano i doppi puntatori che utilizzo nei parametri formali della funzione InsertClient?
Grazie anticipatamente!

Rispondi quotando