background image

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(); 
};

 

background image

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; 
};

 

background image

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