098 TIF

098 TIF



int main(int argc, char* argv[])

{

KlasaNaucz t1;

KlasaPrac s1;

cout « tl.nldNaucz « endl; cout « sl.nldPrac « endl;

return 0;

}

Użycie unii nie daje bezpieczeństwa związanego ze zgodnością typów. Każda ze j składowych unii może zostać użyta w dowolnej chwili. Jeśli więc w klasie przechowujemy różne wartości w zależności od obiektu, do którego odnosi się klasa, to nie ] mamy możliwości sprawdzenia, że do konkretnego obiektu dostęp uzyskuje właściwa składowa unii.

Na przykład we fragmencie „Przed” mamy klasę, która przechowuje informacje o pracownikach. Jeśli dane dotyczą nauczyciela, to zostaje użyta zmienna nldNaucz, I jeśli natomiast osobę z działu technicznego, to zostaje użyta zmienna nldPrac. Ponie- waż osoba jest albo nauczycielem albo pracownikiem technicznym, zaoszczędziliśmy i trochę miejsca, łącząc w unii dwie możliwe wartości.

Mimo że moglibyśmy dodać flagę oznaczającą, do której grupy zalicza się dany pracownik, kompilator nie może zapewnić, że na przykład w wypadku nauczycieli uzyskujemy dostęp tylko do zmiennej nldNaucz. Kompilatora to nie obchodzi. Jeśli zapomnimy o sprawdzeniu, do jakiego obiektu się odnosimy, to możemy rozpętać istne pandemonium.

We fragmencie „Po” utworzyliśmy klasę podstawową ze zmiennymi składowymi wspólnymi dla obu klas. Następnie utworzyliśmy klasy pochodne — jedną tylko dla nauczycieli i jedną tylko dla pracowników technicznych. Mimo że kod jest wówczas odrobinę bardziej kosztowny, zapewniamy sobie bezpieczeństwo zgodności typów. Kompilator uniemożliwi nam próbę uzyskania dostępu do zmiennej nldPrac z klasy nauczycieli lub zmiennej nldNaucz z klasy pracowników technicznych.

Inicjalizowanie w unii

unikanie nieoczekiwanych wyników

Przed

class uKlasa

{

public:

uKlasa() : nldNaucz(O), fltPensja(0.), nldPrac(3)

{

}


Wyszukiwarka

Podobne podstrony:
Prędkość i czas spadania - II Funkcja main int main( int argc, char *argv[]) I float
Nasz pierwszy program #include <stdio.h> #include <stdlib .h> int main(int argc , char *
1.4. Środowisko programistyczne #include "soleng.h" int main(int argc, char *argv[]){ eWor
18 gdb hakingff’ live:/ramdisk/home/haking ) main (int argc, char *argv[]) { fn(argv[ll); print
04 p01 #include <stdio.h> #include <conio.c> #include <string> int rnain(int argc,
17 p01 #include <stdio.h> #include <conio.c> #include <iostream.h> int main(int ar
03 p01 #include <stdio.h> #include <conio.c> #include <iostream.h> int main(i
137 KONWERSJE ffinclude <stdio.h> int nain (int argc, char •argv[]) { printf C7.s argv[l]
Komunikacja między procesami w llnixie łendif    /* DEBOG */ ) main(int argc, char

więcej podobnych podstron