Lab cpp 12

background image

Laboratorium nr 12

Temat: Polimorfizm oraz funkcje wirtualne..

1. Koncepcja polimorfizmu oraz funkcji wirtualnych w C++

Polimorfizm: oznacza istnienie kilku wersji funkcji lub operatorów o tej samej nazwie. W C++

mamy dwie formy polimorfizmu: statyczny (wykonywany w czasie kompilacji) oraz dynamiczny.

Polimorfizm statyczny odnosi si do przeci ania funkcji oraz operatorów natomiast polimorfizm

dynamiczny jest realizowany przy wykorzystaniu funkcji wirtualnych. Ró nica pomi dzy polimorfizmem

statycznym a dynamicznym polega na tym, e w statycznym C++ wybiera odpowiedni wersj

przeci onej funkcji podczas kompilacji. W polimorfizmie dynamicznym C++ znajduje odpowiednia

wersj przeci onej funkcji na podstawie wska nika do obiektu.

Funkcje wirtualne: ich koncepcja jest podobne do przeci ania funkcji, z tym, e w przypadku

funkcji wirtualnych mo emy zast pi ich definicj w klasie bazowej, nowa definicj w klasie pochodnej.

W tym celu nale y w klasie bazowej nale y poprzedzi definicj funkcji słowem virtual.

class klasa {

public:

virtual typ funkcja (argumenty);

}

class nowa:public klasa{

public:

int funkcja (argumenty);

}

Uwaga: w C++ istnieje tak e koncepcja czystych funkcji wirtualnych, to znaczy takich, dla których

wyst puje jedynie deklaracji w klasie bazowej zako czona znakiem „=0”. W klasach pochodnych nale y

wówczas zamieni czyst funkcj wirtualna jej deklaracj . Klasa, która zawiera czyste funkcje wirtualne

nazywa si klas abstrakcyjn i nie mo e istnie aden obiekt tej klasy

virtual typ funkcja (argumenty)=0;

! czysta funkcja wirtualna

# include <conio.h>
# include <iostream>
# include <iomanip.h>

using namespace std;

class macierz {
public:
int x,y;
virtual int wyswietl(void)=0;
};

class itg:public macierz {
public:
int *tab;
int wyswietl (void);
int wprowadz (int w);
itg(int n, int m);
~itg();
};

class flt:public macierz {
public:
float *tab;
int wyswietl (void);
int wprowadz (float w);
flt(int n, int m);
~flt();
};

background image

int itg::wyswietl(void){
cout << "\nMacierz: Integer" << endl;
for (int i=0; i<x; i++) {
for (int j=0; j<y; j++) cout << setw(4) << *(tab+y*i+j) << "\t";
cout <<"\n";
};
};

int itg::wprowadz (int w) {
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
*(tab+y*i+j)= w;
return 0;
};

itg::itg(int n, int m){
x=n;
y=m;
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;
};

int flt::wyswietl (void){
cout << "\nMacierz: Float" << endl;
for (int i=0; i<x; i++) {
for (int j=0; j<y; j++) cout << setw(5) << setprecision(5) << *(tab+y*i+j)
<< "\t";
cout <<"\n";
};
};

int flt::wprowadz (float w) {
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
*(tab+y*i+j)=w;
return 0;
};

flt::flt(int n, int m){
x=n;
y=m;
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() {
class itg A(3,3);
class flt B(3,3);
A.wprowadz(1);
A.wyswietl();
B.wprowadz(1.1);
B.wyswietl();
system("PAUSE");
delete &A;
delete &B;
return 0;
}

2. Zadanie:

Zmodyfikuj powy szy program tak, aby umo liwiał deklaracje szeregu macierzy o dowolnych

wymiarach i typach (integer, float, char, itp.) oraz podstawowe działania na macierzach (dodawanie,

mno enie, transpozycja, itp.) z wykorzystaniem funkcji wirtualnych.

Uwaga:

• Program powinien składa si z oddzielnych plików, tzn. pliku głównego oraz plików

zdefiniowanych klas, itp.

• Program powinien posiada szereg zabezpiecze , np. sprawdzanie czy wybrane macierzy maj

odpowiednie typy i wymiary oraz czy istnieje przestrze na utworzenie kolejnej macierzy, itp.

Program powinien posiada krótkie menu wyboru, np.:

1.

Utwórz macierz: integer, float, char

2.

Wy wietl macierz

3.

Wypełnij macierz – dane losowe

4.

Dodaj macierze

5.

Pomnó macierze

6.

itp.

7.

Koniec


Wyszukiwarka

Podobne podstrony:
INS LAB PEWN 5 12 13
INS LAB PEWN 3 12 13
INTERNET Lab poziom B 12 13
Lab cpp 09
INS LAB PEWN 4 12 13 id 214856 Nieznany
INS LAB PEWN 1 12 13 id 214853 Nieznany
Lab cpp 02
Fizyka+lab+zad+12 (1)
Lab cpp 06
INS LAB PEWN 6 12 13
Lab cpp 05
sem III GWiOW lab cw 12$
Lab cpp 08
Lab cpp 07
Lab cpp 03
INS LAB PEWN 2 12 13

więcej podobnych podstron