background image

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;

}

background image

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

background image

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