Lab cpp 09

background image

Laboratorium nr 9

Temat: Funkcje zaprzyja nione, funkcje inline oraz argumenty domy lne funkcji.

1. Koncepcja funkcje zaprzyja nionych oraz inline w C++

Funkcje zaprzyja nione: w przypadku istnienie w deklaracji klasy zmiennych typu private, dost p

do nich jest ograniczony do danego obiektu, wynika to z faktu, e w C++ jednostk chronion przed

niepowołanym dost pem jest klasa, a nie obiekt. Oznacza to, e funkcja składowa danej klasy mo e

u ywa wszystkich składowych prywatnych dowolnego obiektu tej samej klasy. Natomiast do

składowych prywatnych jakiego obiektu nie ma dost pu funkcja innej klasy, ani jakakolwiek funkcja

niezale na. Rozwi zaniem tego problemu jest zastosowanie funkcji zaprzyja nionych. Funkcja

zaprzyja niona posiada dost p do prywatnych danych obiektu lub obiektów danej klasy. Deklaracja:

class klasa {

private:

typ dana;

public:

friend typ funkcja (np. const class klasa &);

! argumentem funkcji b dzie najcz ciej

}

referencja do obiektu danej klasy

Funkcje inline: celem tych funkcji jest przyspieszenie działania programu. Wywołania funkcje inline w

programie s zast powane w czasie kompilacji pełnym kodem funkcji, tzn. zostaje ona rozwini ta do

pełnej zawarto ci funkcji. Podej cie takie, zaoszcz dza czas na obsług wywołania funkcji, tzn. nie jest

potrzebny kod umieszczenia warto ci na stosie, wywołania funkcji, pobrania parametru ze stosu i

zako czenia działania funkcji. Deklaracja:

class klasa {

private:

public:

int funkcja (…);

}

inline typ klasa::funkcja {

}

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

using namespace std;

class macierz {
private:
char nazwa[8];
float *tab;
public:
int x,y;
void wyswietl();
float wartosc(int n, int m);
inline void wprowadz(int n, int m, float w);
friend int dodaj(const class macierz &, const class macierz &);
macierz(int n=0, int m=0, char *nzw=""); //

! deklaracja argumentów domy lnych

~macierz();
};

background image

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

float macierz::wartosc(int n, int m){
return *(tab+y*n+m);
};

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

macierz::macierz(int n, int m, char *nzw){
x=n;
y=m;
strcpy(nazwa,nzw);
tab=new float[n*m];
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
*(tab+y*i+j)=0.0;
}

macierz::~macierz(){
delete[] tab;
};

int dodaj(const class macierz &m1, const class macierz &m2){
class macierz tmp(m1.x,m1.y,"suma");
for (int i=0; i<tmp.x; i++)
for (int j=0; j<tmp.y; j++)
*(tmp.tab+tmp.y*i+j)=*(m1.tab+m1.y*i+j)+*(m2.tab+m2.y*i+j);
tmp.wyswietl();
return 0;
};

int main() {
clock_t poczatek,koniec;
class macierz *A[2];
int wymiar=6;
A[0]=new macierz(wymiar,wymiar,"A1");
A[1]=new macierz(wymiar,wymiar,"A2");
poczatek = clock();
for(int i=0;i<wymiar;i++)
for(int j=0;j<wymiar;j++){
A[0]->wprowadz(i,j, rand());
A[1]->wprowadz(i,j, rand());
}
A[0]->wyswietl();
A[1]->wyswietl();
koniec=clock();
dodaj(*A[0],*A[1]);
cout << "\nCzas=" << (float) (koniec-poczatek)/CLK_TCK;
getch();
delete[] A;
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.) w

oparciu o funkcji zaprzyja nione dla klasy macierz.

background image

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

2.

Wy wietl macierz

3.

Wypełnij macierz – dane losowe

4.

Dodaj

5.

Pomnó

6.

itp.

7.

Koniec


Wyszukiwarka

Podobne podstrony:
Lab cpp 12
Lab fiz 09, Piotr Mazur Rzesz˙w 27.02.1996
Lab Java11 09, l2
Lab cpp 02
Lab cpp 06
Lab cpp 05
Lab MG 09 (2)
Lab cpp 08
Lab cpp 07
Lab cpp 03
Lab cpp 04
Lab cpp 11
Lab cpp 12
Lab MG 09
Lab 09 2011 2012
2011 Lab 09 BER NBIid 27452
Rozpiska Mikrobiologia Przemyslowa 09, BIO, PCR - DGGE, In Situ, API, Lab 1
09 10 Lab Sens

więcej podobnych podstron