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