Wykład_02.pdf

(261 KB) Pobierz
Konstruktor i destruktor
Konstruktor
Konstruktor -- specjalna funkcja składowa klasy.
class klasa {
klasa (opcjonalne lista argumentów
formalnych);
}
Własności:
- ma tę samą nazwę jak klasa,
- może nadawać składnikom obiektu wartości,
- może być przeładowany,
- nie ma typu zwracanej wartości !!!
- może tworzyć obiekty kwalifikowane przez const
albo volatile ale sam nie może być takich typów,
- nie może być typu static – musi działać na
składowych niestatycznych (wskaźnik this ),
- nie może być typu virtual , zapamiętaj
- jeśli obiekt ma być składnikiem unii, to jego klasa
nie może mieć żadnego konstruktora.
Języki i Paradygmaty
Programowania - w16
JC/2012
2
Konstruktor - przykład
class p {
char nazwa[20];
int i,j;
float x;
static int ile;
public:
//konstruktory
p(int, char*, float, int = 0);
p(void);
//fcje składowe
void f1(int a); // f1 zmienia wartość składowej obiektu klasy p
void f2(void); // ta fcja wypisuje zawartość
};
p::p(int ii, char * nn, float xx, int w){
strcpy(nazwa,nn);
i = ii; j = w;
x = xx;
f2();
}
p:p(void) {
char tmp[20];
ile++;
strcpy(nazwa,”obiekt: ”);itoa(ile,tmp,10);strcat(nazwa,tmp);
x = 30;
f2();
}
Języki i Paradygmaty
Programowania - w16
JC/2012
3
Konstruktor – przykład c.d.
int p::ile; // definicja składnika statycznego musi być na zewnątrz
main() {
p Ob1(1,"zupa",30.,13);
p Ob2(2,"deser",1.,1);
p A;
volatile p C;
const p D(3,"const",2.,2);
system("PAUSE");
}
Wydruk:
nazwa zupa wartosc ile: 0
wartosc i: 1 x: 30
----------------------
nazwa deser wartosc ile: 0
wartosc i: 2 x: 1
-----------------------
nazwa obiekt: 1 wartosc ile: 1
wartosc i: 2 x: 30
-----------------------
nazwa obiekt: 2 wartosc ile: 2
wartosc i: 0 x: 30
-----------------------
nazwa const wartosc ile: 2
wartosc i: 3 x: 2
Kilka wersji konstruktora – przeładowanie
Możliwa składnia:
p Ob2(2,"deser",1.,1); p Ob2 = p(2,”deser”,1.1);
p A; p A = p();
Obecność konstruktora domniemanego – wywoływanego bez
argumentów – p::p(void);
Języki i Paradygmaty
Programowania - w16
JC/2012
4
Konstruktor – obiekty lokalne i globalne
Lokalne:
…..
{
otworzenie bloku
p Local; utworzenie obiektu lokalnego
} zamknięcie bloku lokalnego; obiekt jest
……
likwidowany
Konstruktor startuje tutaj -- automatyczny obiekt lokalny
Jak jest w przypadku obiektów statycznych ? ( static)
Istnieje od momentu inicjalizacji do końca programu
Nie jest dostępny poza zakresem – błąd kompilacji przy próbie wywołania
Globalne:
p Obiekt_globalny;
main() { …. }
Zakres ważności obiektu – plik
Czas życia – czas wykonywania programu
Konstruktor jest wywoływany przed rozpoczęciem działania main()
Daje to możliwość wykonania dedykowanego kodu przed rozpoczęciem
wykonywania programu
Wykorzystywane dla organizacji środowiska programu
Języki i Paradygmaty
Programowania - w16
JC/2012
5
903100025.001.png
Zgłoś jeśli naruszono regulamin