Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
znajdąsiępozazakresem)iuruchomidowolnykod,któryumieściłeśpowy-
rażeniucatch.Jeżeliżadenwyjątekniezostaniezgłoszony,kodwewnątrz
instrukcjicatchnigdyniezostaniewykonany.
Konstruktory,destruktoryiwyjątkiściślezwiązanezinnąpodstawową
cechąC++.Cechatawiążecyklżyciaobiektuzzasobami,jakieonpo-
siada.Jesttokoncepcjazwanainicjalizowaniemwchwilipozyskaniazasobu
(paradygmatRAII),czasamitakżenazywanaopisowofikonstruktorprzydziela,
destruktorzwalnia”.PrzyjrzyjsięklasieC++zaprezentowanejnalistingu24.
#include<system_error>
#include<cstdio>
structFile{
File(constchar*path,boolwrite){
autofile–mode:write?"w":"r";
file–pointer:fopen(path,file–mode);3
if(!file_pointer)throwstd::system_error(errno,std::system_category());4
}
~File(){
fclose(file–pointer);
}
FILE*file–pointer;
};
Listing24.KlasaFile
KonstruktorklasyFileprzyjmujedwaargumenty.Pierwszyargu-
mentodpowiadaścieżcepliku,adrugijestwartościątypuboolodpowiada-
jącątemu,czyplikpowinienzostaćotwartydozapisu(true),czydoodczytu
(false).Wartośćtegoargumentujestprzypisywanadopolafile_modezapo-
mocąoperatoratrójargumentowego?:.Operatortrójargumentowyocenia
wyrażenielogiczneizwracajednązdwóchwartościwzależnościodwyniku.
Naprzykład:
x?val–if–true:val–if–false
Jeśliwyrażenielogicznexjestrównetrue,wartośćwyrażeniabędziewy-
nosićval–if–true.Jeślixjestrównefalse,wartośćwyrażeniabędzierówna
val–if–false.
Wefragmenciekoduzlistingu24konstruktorobiektuFilepróbujeotwo-
rzyćplikościeżcepathwtrybiedoodczytulubdozapisu3.Jeślicośnie
zadziała,wywołaniefunkcjifopenprzypiszepolufile_pointerwartośćnullptr
(jesttospecjalnawartośćzdefiniowanawjęzykuC++podobnado0).Gdy
taksięstanie,zostaniezgłoszonywyjąteksystem_error4.Tenwyjątektopo
prostuobiekt,któryzawieraszczegółoweinformacjeobłędziesystemowym.
Jeślipolefile_pointerniebędzierównenullptr,będziejemożnaużyć.Jestto
niezmienniktejklasy.
Rozważterazprogramzlistingu25wykorzystującyklasęFile.
WstępdlaprogramistówC
lv