background image

Laboratorium nr 8 

 

Temat:  Przeci anie funkcji składowych oraz konstruktorów klas  

 

1. Koncepcja przeci ania funkcji w C++ 

 

W C++ nie ma konieczno ci przestrzegania typów danych, gdy  jest on w stanie sam sprawdzi  

typ  danych  a  nast pnie  stwierdzi   czy  wywołana  funkcja  została  zdefiniowana  z  danym  tym  typem 

danych. Ta sama funkcja mo e by  w C++ zdefiniowana wielokrotnie dla ró nych typów parametrów, 

przy czym C++ u yje automatycznie wła ciwej wersji funkcji, któr  odnajdzie na podstawie typu i liczby 

przesyłanych argumentów. 

  

# include <iostream> 
# include <conio.h> 
# include <stdio.h> 
# include <stdlib.h> 
 
using namespace std; 
 
class macierz { 
public: 
    int x,y; 
    int *tab_itg; 
    float *tab_flt; 
    int wyswietl(int *tab); 
    int wyswietl(float *tab); 
    int wprowadz(int *tab, int w); 
    int wprowadz(float *tab, float w); 
    macierz(int n, int m, int w); 
    macierz(int n, int m, float w); 
    ~macierz(); 
}; 

int macierz::wyswietl(int *tab){ 
   cout << "\nMacierz: Integer" << endl; 
   for (int i=0; i<x; i++) { 
         for (int j=0; j<y; j++) cout << *(tab+y*i+j) << "\t"; 
         cout <<"\n"; 
   }; 
}; 
 
int macierz::wyswietl(float *tab){ 
   cout << "\nMacierz: Float" << endl; 
   for (int i=0; i<x; i++) { 
         for (int j=0; j<y; j++) cout << *(tab+y*i+j) << "\t"; 
         cout <<"\n"; 
   }; 
}; 
 
int macierz::wprowadz (int *tab, int w) { 
    for(int i=0;i<x;i++) for(int j=0;j<y;j++)*(tab+y*i+j)=w; 
    return 0; 
}; 
 
int macierz::wprowadz (float *tab, float w) { 
    for(int i=0;i<x;i++) for(int j=0;j<y;j++)*(tab+y*i+j)=w; 
    return 0; 
}; 
 

background image

macierz::macierz(int n, int m, int w){ 
   x=n; 
   y=m; 
   tab_itg=new int[n*m]; 
   for (int i=0; i<n; i++) 
   for (int j=0; j<m; j++) 
   *(tab_itg+y*i+j)=w; 

 
macierz::macierz(int n, int m, float w){ 
   x=n; 
   y=m; 
   tab_flt=new float[n*m]; 
   for (int i=0; i<n; i++) 
   for (int j=0; j<m; j++) 
   *(tab_flt+y*i+j)=w; 

 
macierz::~macierz(){ 
   delete[] tab_itg; 
   delete[] tab_flt; 
};

 

int main() { 
class macierz *A, *B; 
    A=new macierz(3,3,(int)0); 
    A->wprowadz(A->tab_itg,1); 
    A->wyswietl(A->tab_itg); 
    B=new macierz(3,3,(float)0); 
    B->wprowadz(B->tab_flt,2.2); 
    B->wyswietl(B->tab_flt); 
    getch(); 
    delete A; 
    delete B; 
return 0; 

 

2. Zadanie: 

Zmodyfikuj  powy szy  program  tak,  aby  istniała  dodatkowo  mo liwo   deklaracji  macierzy 

znakowych, przy czym program powinien posiada  podstawowe operacje na elementach macierzy (tzn. 

kasowanie, dopisywanie, itp.) w zale no ci od typu danych 

 

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, char 

2.

  Wy wietl macierz 

3.

  Wpisz element macierzy 

4.

  Kasuj element macierzy 

5.

  itp. 

6.

  Koniec