Lab cpp 11

background image

Laboratorium nr 11

Temat: Przeci anie operatorów.

1. Koncepcja przeci ania operatorów w C++

W C++ mo na przeci a istniej ce operatory, to znaczy nadawa im nowe znaczenie dla operacji

wykonywanych cz ciowo lub w cało ci na obiektach typu klasa. Aby przeci y operator, np. „+”,

definiuje si funkcj o nazwie operator +, przy czym funkcje te musz by funkcjami składowymi albo

zaprzyja nionymi z obiektami, na których działaj

class klasa{

public:

klasa operator +();

}

W C++ mo na przeci a zarówno operatory jednoargumentowe (np. ++) jak i dwuargumentowe

(+). Nale y przy tym ograniczy si do przeci ania istniej cych operatorów, przy zachowaniu

odpowiedniej liczby argumentów. Zwykle funkcja operatora zwraca typ obiektu, na którym działa.

Uwaga: do funkcji zaprzyja nionych nie jest przesyłany wska nik this, dlatego te operatory powinny

by wówczas zadeklarowane jako referencyjne – wówczas przekazywany jest sam obiekt, a nie jego

kopia.

# include <conio.h>
# include <iostream>
# include <stdio.h>
# include <stdlib.h>
# include <math.h>

using namespace std;

class macierz {
float *tab;
static int licznik;
public:
int x,y;
void wyswietl();
void wprowadz(int n, int m, float w);
macierz operator++(void);
int operator==(macierz m);
macierz * operator+(macierz m);
friend macierz * operator^(const class macierz &, float p);
macierz(int n=0, int m=0, float w=0);
~macierz();
};

background image

int macierz::licznik=0;

void macierz::wyswietl(){
cout << "\nMacierz:" << licznik << endl;
for (int i=0; i<x; i++) {
for (int j=0; j<y; j++) cout << *(this->tab+y*i+j) << "\t";
cout <<"\n";
};
};

void macierz::wprowadz (int n, int m, float w) {
*(this->tab+y*n+m)=w;
};

macierz macierz::operator++(void){
licznik++;
return *this;
};

int macierz::operator==(macierz m){
if ((m.x==this->x)&&(m.y==this->y)) return 1;
else return 0;
};

macierz * macierz::operator+(macierz m){
class macierz *tmp;
tmp=new macierz(m.x,m.y);
for(int i=0; i<m.x; i++)
for(int j=0; j<m.y; j++)
*(tmp->tab+tmp->y*i+j)=*(this->tab+this->y*i+j)+*(m.tab+m.y*i+j);
return tmp;
};

macierz::macierz(int n, int m, float w){
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)=w;
}

macierz::~macierz(){
};

macierz * operator^(const class macierz &m1, float p){
class macierz *tmp;
tmp=new macierz(m1.x,m1.y);
for(int i=0; i<m1.x; i++)
for(int j=0; j<m1.y; j++)
*(tmp->tab+tmp->y*i+j)=pow(*(m1.tab+m1.y*i+j),p);
return tmp;
};

background image

int main() {
class macierz A(2,2,2),B(2,2,3),C(3,3),*D,*E;
++A;
A.wyswietl();
B.wyswietl();
C.wyswietl();
if (A==C) D=A+C; else cout << "\nA+C:Blad\n";
if (A==B) D=A+B; else cout << "\nA+B:Blad\n";
D->wyswietl();
E=A^3;
E->wyswietl();
system("PAUSE");
delete &A,&B,&C,D,E;
return 0;
}

2. Zadanie:

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

wymiarach oraz podstawowe działania na macierzach (dodawanie, mno enie, transpozycja, itp.) z

wykorzystaniem operatorów przeci onych.

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 wymiary oraz czy istnieje przestrze na utworzenie kolejnej macierzy, itp.

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

1.

Utwórz macierz

2.

Wy wietl macierz

3.

Wypełnij macierz – dane losowe

4.

Dodaj macierze

5.

Pomnó macierze

6.

itp.

7.

Koniec


Wyszukiwarka

Podobne podstrony:
Lab cpp 12
Sprawozdanie6, dc, GPF, Fizyka lab, Ćw. 11
lab 28 11 10
Lab cpp 09
Maszyny i urządzenia LAB TP 11,15
Lab cpp 02
lab 28 11 10
Lab cpp 06
Lab cpp 05
Opis 11, dc, GPF, Fizyka lab, Ćw. 11
Regulamin lab AKiSO 11 2010
lab 13, 11.2.4.4 Packet Tracer - Configuring Port Forwarding on a Linksys Router Instructions
Lab cpp 08
Lab cpp 07
Lab cpp 03
Lab cpp 04
outim lab pytania 11
Lab cpp 12
Pomiar parametrów czwórników [lab] 1999 11 23

więcej podobnych podstron