Laboratorium nr 7
Temat: Dziedziczenie, tablice obiektów oraz obiekty jako argumenty funkcji
1. Koncepcja dziedziczenia w C++
W C++ istnieje mo liwo definicji wielu klas, przy czym ró ne klasy mog zawiera tak e
elementy wspólne, np. zmienne czy funkcje składowe. W C++ istnieje mo liwo utworzenia pewnych
klas ogólnych, które nazywamy klasami bazowymi (base classes). Klasa bazowa zawiera składowe, które
b d wyst powa z kolei we wszystkich tzw. klasach pochodnych, np.
class macierz_integer :
public macierz {
private:
….
public:
….
}
gdzie klasa macierz_integer jest pochodn klasy bazowej macierz. W przypadku dziedziczenia nale y
zwróci uwag na deklaracje typu public oraz private przed nazw klasy bazowej.
# include <conio.h> 
# include <iostream> 
# include <stdio.h> 
# include <stdlib.h> 
 
using namespace std; 
 
class macierz { 
public: 
    int x,y; 
    int numer; 
    int wyswietl_i(class itg *M); 
    int wyswietl_f(class flt *M); 
    int wprowadz_i(class itg *M, int w); 
    int wprowadz_f(class flt *M, float w); 
}; 
 
class itg:public macierz { 
public: 
    int *tab; 
    itg(int nr, int n, int m); 
    ~itg(); 
}; 
 
class flt:public macierz { 
public: 
    float *tab; 
    flt(int nr, int n, int m); 
    ~flt(); 
};
int macierz::wyswietl_i(class itg *M){ 
   cout << "\nNumer macierzy=" << numer << endl; 
   for (int i=0; i<x; i++) { 
         for (int j=0; j<y; j++) cout << *(M->tab+y*i+j) << "\t"; 
         cout <<"\n"; 
   }; 
}; 
 
int macierz::wprowadz_i (class itg *M, int w) { 
    for(int i=0;i<x;i++) 
        for(int j=0;j<y;j++) 
           *(M->tab+y*i+j)=w; 
   return 0; 
}; 
 
int macierz::wyswietl_f(class flt *M){ 
   cout << "\nNumer macierzy=" << numer << endl; 
   for (int i=0; i<x; i++) { 
         for (int j=0; j<y; j++) cout << *(M->tab+y*i+j) << "\t"; 
         cout <<"\n"; 
   }; 
}; 
 
int macierz::wprowadz_f (class flt *M, float w) { 
    for(int i=0;i<x;i++) 
        for(int j=0;j<y;j++) 
           *(M->tab+y*i+j)=w; 
   return 0; 
};
itg::itg(int nr, int n, int m){ 
   x=n; 
   y=m; 
   numer=nr; 
   tab=new int[n*m]; 
   for (int i=0; i<n; i++) 
   for (int j=0; j<m; j++) 
   *(tab+y*i+j)=0; 
} 
 
itg::~itg(){ 
   delete[] tab; 
}; 
 
flt::flt(int nr, int n, int m){ 
   x=n; 
   y=m; 
   numer=nr; 
   tab=new float[n*m]; 
   for (int i=0; i<n; i++) 
   for (int j=0; j<m; j++) 
   *(tab+y*i+j)=0; 
} 
 
flt::~flt(){ 
   delete[] tab; 
};
int main() { 
int nr=0; 
class itg M(++nr,1,1); 
class itg *A[2]; 
class flt *B[2]; 
    M.wprowadz_i(&M,1); 
    M.wyswietl_i(&M); 
    for (int i=2;i<4;i++){ 
        A[i]=new itg(++nr,i,i); 
        A[i]->wprowadz_i(A[i],nr); 
        A[i]->wyswietl_i(A[i]); 
        B[i]=new flt(++nr,i,i); 
        B[i]->wprowadz_f(B[i],nr*1.1); 
        B[i]->wyswietl_f(B[i]); 
    }; 
    system("PAUSE"); 
    delete[] A; 
    delete[] B; 
return 0; 
}
2. Zadanie:
Zmodyfikuj powy szy program tak, aby istniała mo liwo deklaracji „n” tablic o kolejno zadanych
wymiarach i typach, przy czym program powinien posiada mo liwo :
• wy wietlania macierzy o zadanym numerze,
• wy wietlania macierzy według typu (integer, float)
• wypełnienia wybranej macierzy zadan liczb ,
• zerowanie wybranej macierzy macierzy,
Uwaga: Program powinien składa si z oddzielnych plików, tzn. pliku głównego oraz plików
zdefiniowanych klas, itp.
Program powinien posiada krótkie menu wyboru, np.:
1.
Utwórz macierz: integer, float
2.
Wy wietl macierz, wg numeru
3.
Wy wietl macierze, wg typu
4.
Wypełnij macierz, wg numeru
5.
Zeruj macierz, wg numeru
6.
itp.
7.
Koniec