Lab cpp 10


Laboratorium nr 10
Temat: Wskazniki do obiektów oraz zmienne i funkcje statyczne.
1. Koncepcja wskazników oraz zmiennych i funkcji statycznych
" Wskazniki: wskazniki do obiektów działają na tej samej zasadzie jak wskazniki do innych
zmiennych. Warto jednak zwrócić uwagę na to, że funkcja składowa klasy otrzymuje niejawnie
adres obiektu, który ją wywołał. Wewnątrz funkcji składowej zmienna this jest wskaznikiem do
obiektu, który wywołał dana funkcję. Ponadto można jej zawsze przekazać jawnie argumenty typu
jej własnej lub innej klasy.
" Zmienne Static: dana składowa zadeklarowane w klasie jako stanic jest dzielone przez wszystkie
obiekty danej klasy. Istnieje nawet wtedy, kiedy nie istnieje żaden obiekt. Domyślne dana taka
jest inicjalizowana wartością zerową. Możliwa jest inicjalizacja jawna na zewnątrz klasy (nawet,
jeżeli dana jest prywatna) przy użyciu operatora zakresu:
class klasa {
private:
static int licznik;
public:
&
}
" Funkcje Static: jeżeli jakaś funkcja składowa ma działanie niezależne od obiektów swojej klasy,
można ją zadeklarować z atrybutem stanic. Funkcja taka może być nastepnie wywołana bez
wymieniania jakiegokolwiek obiektu, a jedynie poprzedzając jej nazwę nazwą klasy i operatorem
zakresu (::).
Uwaga: C++ pozwala na domyślne przekazywanie parametrów przez referencję, a nie wartość. Oznacza
to, że pomimo wywołania funkcji z pewnymi argumentami, a nie wskaznikami, argumenty te będą
automatycznie przekazywane przez referencję. W tym celu, należy jedynie w deklaracji funkcji
poprzedzić argument operatorem & - funkcja ta będzie wówczas działać w stylu języka, w którym
parametry są przekazywane przez referencję.
# include
# include
# include
# include
using namespace std;
class macierz {
static int licznik;
int numer;
float *tab;
public:
int x,y;
void wyswietl();
void wprowadz(int n, int m, float w);
int dodaj(class macierz &m1, class macierz &m2);
class macierz * pomnoz(float liczba);
static int podaj_licznik();
macierz(int n=0, int m=0);
~macierz();
};
int macierz::licznik=0;
void macierz::wyswietl(){
cout << "\nMacierz:" << numer << endl;
for (int i=0; i for (int j=0; jtab+y*i+j) << "\t";
cout <<"\n";
};
};
void macierz::wprowadz (int n, int m, float w) {
*(this->tab+y*n+m)=w;
};
int macierz::dodaj(class macierz &m1, class macierz &m2){
for (int i=0; ix; i++)
for (int j=0; jy; j++)
*(this->tab+this->y*i+j)=*(m1.tab+m1.y*i+j)+*(m2.tab+m2.y*i+j);
return 0;
};
class macierz * macierz::pomnoz(float liczba){
class macierz * tmp;
tmp=new macierz(this->x,this->y);
for (int i=0; ix; i++)
for (int j=0; jy; j++)
*(tmp->tab+tmp->y*i+j)=*(this->tab+this->y*i+j)*liczba;
return tmp;
}
int macierz::podaj_licznik(){
return licznik;
};
macierz::macierz(int n, int m){
x=n;
y=m;
numer=licznik;
tab=new float[n*m];
for (int i=0; i for (int j=0; j *(tab+y*i+j)=0.0;
licznik++;
}
macierz::~macierz(){
licznik--;
};
int main() {
class macierz **A;
for (int k=0; k<2; k++){
A[k]=new macierz(3,3);
for(int i=0;i<3;i++) for(int j=0;j<3;j++) A[k]->wprowadz(i,j,k);
A[k]->wyswietl();
};
A[2]=new macierz(3,3);
A[2]->dodaj(*A[1],*A[1]);
A[2]->wyswietl();
cout << "\nLiczba macierzy=" << macierz::podaj_licznik() << endl;
A[3]=A[2]->pomnoz(5.0);
A[3]->wyswietl();
system("PAUSE");
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 z
wykorzystaniem zmiennych i funkcji static oraz wskazników do obiektów.
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: jedną lub wszystkie
3. Wypełnij macierz  dane losowe
4. Dodaj macierze
5. Pomnóż macierze
6. itp.
7. Koniec


Wyszukiwarka

Podobne podstrony:
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
Lab cpp
lab 2
T2 Skrypt do lab OU Rozdział 6 Wiercenie 3
IE RS lab 9 overview
lab pkm 3
CPP (2)
lab chemia korozja

więcej podobnych podstron