Dzień dobry. Mam napisany prosty program, w którym tworzę tablicę obiektów (lista użytkowników z dodawaniem i usuwaniem obiektów na dowolnych pozycjach tablicy w czasie wykonywania programu + alokacja i czyszczenie pamięci). Wykorzystuję w nim struktury, ale mam zadanie przepisać je na klasy, stworzyć interfejs klasy dodając jeden argument jako własny typ, zadeklarować i zdefiniować konstruktor z argumentami domniemanymi. Nie za bardzo wiem, jak się zabrać za to, co podkreśliłem. O ile wiem, jak zrobić konstruktor przy tworzeniu pojedynczych obiektów, to w przypadku mojego programu nie mam pomysłu, jak powinien wyglądać ten konstruktor. Czy mógłbym prosić o jakieś wskazówki?
Kod na strukturach:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct User
{
string imie;
string nazwisko;
};
void alokacja(User *&a);
void inicjalizacja(User *a);
void wypisz(User *a, int *size);
void czyszczenie(User *&a);
void dodawanie(User *&a, int *size);
void usuwanie(User *&a, int *size);
int main()
{
User *u=NULL;
//rozmiar tablicy obiektow przekazywany do niektorych funkcji
int rozmiarTablicy=1;
//menu
int select;
for(;;)
{
cout << "\n 1. inicjalizacja";
cout << "\n 2. dodawanie";
cout << "\n 3. usuwanie";
cout << "\n 4. wyswietlanie";
cout << "\n 0. Wyjscie";
cout << "\n -----------\n";
select=getchar();
switch(select)
{
case '1':
cout << "INICJALIZOWANIE\n";
if(u!=NULL)
cout <<"Baza nie jest pusta.";
else
{
alokacja(u);
inicjalizacja(u);
}
break;
case '2':
cout << "DODAWANIE \n";
dodawanie(u,&rozmiarTablicy);
break;
case '3':
cout << "USUWANIE \n";
usuwanie(u,&rozmiarTablicy);
break;
case '4':
cout << "WYSWIETLANIE\n";
if(u==NULL)
cout <<"Brak rekordow.";
else
wypisz(u,&rozmiarTablicy);
break;
case '0':
if(u!=NULL)
czyszczenie(u);
exit(EXIT_SUCCESS);
break;
default:
printf("Nie ma takiej opcji!");
}
getchar();
getchar();
system("cls");
}
return 0;
}
void alokacja(User *&a)
{
a = new User[1];
}
void inicjalizacja(User *a)
{
cout << "Imie: ";
cin >> a[0].imie;
cout << "Nazwisko: ";
cin >> a[0].nazwisko;
}
void wypisz(User *a, int *size)
{
for(int i =0; i<*size; i++)
{
cout << i+1 << ". " << "Nazwisko i imie: " << a[i].nazwisko <<" "<<a[i].imie <<endl;
}
cout <<endl;
}
void czyszczenie(User *&a)
{
delete [] a;
a=NULL;
}
void dodawanie(User *&a, int *size)
{
int miejsce;
cout << "Miejsce: ";
cin >> miejsce;
if((miejsce<1) || (miejsce>(*size)+1))
{
cout << "Bledna wartosc!";
return;
}
miejsce--;
User *x;
x = new User[*size+1];
for(int i=0; i<miejsce; i++)
{
x[i]=a[i];
}
for(int j=miejsce+1; j<=*size; j++)
{
x[j]=a[j-1];
}
cout << "Imie: ";
cin >> x[miejsce].imie;
cout << "Nazwisko: ";
cin >> x[miejsce].nazwisko;
delete [] a;
a=NULL;
(*size)++;
a=x;
}
void usuwanie(User *&a, int *size)
{
int miejsce;
cout << "Miejsce: ";
cin >> miejsce;
if((miejsce<1) || (miejsce>(*size)))
{
cout << "Bledna wartosc!";
return;
}
miejsce--;
User *x;
x = new User[*size];
for(int i=0; i<miejsce; i++)
{
x[i]=a[i];
}
for(int j=miejsce+1; j<*size; j++)
{
x[j-1]=a[j];
}
delete [] a;
a=NULL;
(*size)--;
a=x;
cout << "Usunieto uzytkownika!"<<endl;
}
Nie wiem, czy to w ogóle ma sens
nie ma. Nie możesz po prostu rzucić garść funkcji w kontekst i udać, że to poprawnie zaprojektowany obiekt.