Laboratorium nr 5
Temat: Deklaracja konstruktorów oraz destruktorów dla klas. Przekazywanie parametrów do konstruktorów.
1) Konstruktory
Zadaniem konstruktorów jest inicjowanie obiektów. Konstruktory są funkcjami składowymi, które wywoływane są
automatycznie podczas tworzenia obiektu. Nazwa funkcje konstruktora odpowiada nazwie klasy. Funkcja
konstruktora musi być funkcją publiczną (public) i nie powinna zwracać żadnej wartości,
np.
klasa::klasa() {...}
C++ posiada możliwość przesłania parametrów do konstruktora obiektu, co rozwiązuje większość problemów na
jakie można się natknąć podczas inicjowania obiektu, np.
klasa::klasa(int x) {...}
...
class klasa obiekt( wartość typu int);
# include <conio.h>
# include <iostream.h>
# include <stdio.h>
# include <stdlib.h>
# include <alloc.h>
class macierz {
private:
int x,y;
int *tab;
public:
macierz(int n, int m);
int wprowadz(int i, int j, int w);
int wyswietl();
};
macierz::macierz(int n, int m){
x=n;
y=m;
tab=(int *) calloc(n*m,sizeof(int));
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
*(tab+y*i+j)=0;
}
int macierz::wprowadz (int i, int j, int w) {
*(tab+y*i+j)=w;
return 0;
};
int macierz::wyswietl(){
cout << "\nZadeklarowana macierz\n";
for (int i=0; i<x; i++)
for (int j=0; j<y; j++)
cout << "Macierz["<< i <<"][" << j<< "]=" << *(tab+y*i+j) << "\n";
};
int main() {
class macierz A(2,2),B(3,3);
clrscr();
A.wprowadz(1,1,1);
A.wyswietl();
B.wprowadz(1,1,1);
B.wyswietl();
getch();
return 0;
}
2) Destruktory
Podobnie jak konstruktory, destruktory są wywoływane automatycznie w momencie zakończenia wykonywania
operacji na obiekcie/usuwania obiektu. Destruktory mogą np. zwalniać obszar pamięci, który został przydzielony
obiektowi. Destruktor definiuje się w ten sam sposób jak konstruktor, przy czym do jego nazwy dodaje się jedynie
znak ~, np.
klasa::~klasa() {...}
# include <conio.h>
# include <iostream.h>
# include <stdio.h>
# include <stdlib.h>
# include <alloc.h>
class macierz {
private:
int x,y;
int *tab;
public:
macierz(int n, int m);
~macierz();
int wprowadz(int i, int j, int w);
int wyswietl();
};
macierz::macierz(int n, int m){
x=n;
y=m;
tab=(int*)calloc(n*m,sizeof(int));
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
*(tab+y*i+j)=0;
};
macierz::~macierz(){
free(tab);
};
int macierz::wprowadz (int i, int j, int w) {
*(tab+y*i+j)=w;
return 0;
};
int macierz::wyswietl(){
cout << "\nZadeklarowana macierz\n";
for (int i=0; i<x; i++)
for (int j=0; j<y; j++)
cout << "Macierz["<< i <<"][" << j<< "]=" << *(tab+y*i+j) << "\n";
return 0;
};
int main() {
class macierz A(3,3);
clrscr();
A.wprowadz(1,1,1);
A.wyswietl();
getch();
return 0;
}
Uwaga: W przypadku C++ wszystkie wewnętrzne szczegóły związane z konstruktorem i destruktorem są
obsługiwane przez sam obiekt.
3) Zadanie:
Opracuj program, który będzie definiował obiekty typu „macierz” o zadanych wymiarach np. 3x3, oraz posiadał
możliwość dodawania, odejmowania i mnożenia zadeklarowanych macierzy, tzn. A+B , A-B , A*B
Program powinien posiadać krótkie menu wyboru, np.:
1. Utwórz macierz
2. Wprowadź elementy macierzy
3. Wyświetl macierz
4. Dodaj macierze
5. itp.
6. Koniec