Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Các cấu trúc lồng nhau
Cá c cấ u trú c có thể đ ư ợ c đ ặ t lồ ng nhau vì vậ y mộ t phầ n tử hợ p lệ củ a mộ t cấ u trú c có thể là mộ t cấ u trú c khá c. struct movies_t { char title [50]; int year; } struct friends_t { char name [50]; char email [50]; movies_t favourite_movie; } charlie, maria; friends_t * pfriends = & charlie;Vì vậ y, sau phầ n khai bá o trê n chú ng ta có thể sử dụ ng cá c biể u thứ c sau: charlie.name (trong đ ó hai biể u thứ c cuố i cù ng là tư ơ ng đ ư ơ ng). Cá c khá i niệ m cơ bả n về cấ u trú c đ ư ợ c đ ề cậ p đ ế n trong phầ n nà y là hoà n toà n giố ng vớ i ngô n ngữ C, tuy nhiê n trong C++, cấ u trú c đ ã đ ư ợ c mở rộ ng thê m cá c chứ c nă ng củ a mộ t lớ p vớ i tí nh chấ t đ ặ c trư ng là tấ t cả cá c phầ n tử củ a nó đ ề u là cô ng cộ ng (public). Bạ n sẽ có thê m cá c thô ng tin chi tiế t trong phầ n 4.1, Lớ p. Bà i 12: Cá c Kiể u Dữ Liệ u Do Ngư ờ i Dù ng Đ ị nh Nghĩ a Trong bà i trư ớ c chú ng ta đ ã xem xé t mộ t loạ i dữ liệ u đ ư ợ c đ ị nh nghĩ a bở i ngư ờ i dù ng (ngư ờ i lậ p trì nh): cấ u trú c. Như ng có cò n nhiề u kiể u dữ liệ u tự đ ị nh nghĩ a khá c: Tự đ ị nh nghĩ a cá c kiể u dữ liệ u (typedef). C++ cho phé p chú ng ta đ ị nh nghĩ a cá c kiể u dữ liệ u củ a riê ng mì nh dự a trê n cá c kiể u dữ liệ u đ ã có. Đ ể có thể là m việ c đ ó chú ng ta sẽ sử dụ ng từ khoá typedef , dạ ng thứ c như sau: typedef existing_type new_type_name ; trong đ ó existing_type là mộ t kiể u dữ liệ u cơ bả n hay bấ t kì mộ t kiể u dữ liệ u đ ã đ ị nh nghĩ a và new_type_name là tê n củ a kiể u dữ liệ u mớ i. Ví dụ typedef char C; Trong trư ờ ng hợ p nà y chú ng ta đ ã đ ị nh nghĩ a bố n kiể u dữ liệ u mớ i: C , WORD , string_t và field kiể u char , unsigned int , char* kiể u char[50] , chú ng ta hoà n toà n có thể sử dụ ng chú ng như là cá c kiể u dữ liệ u hợ p lệ: C achar, anotherchar, *ptchar1; typedef có thể hữ u dụ ng khi bạ n muố n đ ị nh nghĩ a mộ t kiể u dữ liệ u đ ư ợ c dù ng lặ p đ i lặ p lạ i trong chư ơ ng trì nh hoặ c kiể u dữ liệ u bạ n muố n dù ng có tê n quá dà i và bạ n muố n nó có tê n ngắ n hơ n. Union Union cho phé p mộ t phầ n bộ nhớ có thể đ ư ợ c truy xuấ t dư ớ i dạ ng nhiề u kiể u dữ liệ u khá c nhau mặ c dù tấ t cả chú ng đ ề u nằ m cù ng mộ t vị trí trong bộ nhớ. Phầ n khai bá o và sử dụ ng nó tư ơ ng tự vớ i cấ u trú c như ng chứ c nă ng thì khá c hoà n toà n: Tấ t cả cá c phầ n tử củ a union đ ề u chiế m cù ng mộ t chỗ trong bộ nhớ. Kí ch thư ớ c củ a nó là kí ch thư ớ c củ a phầ n tử lớ n nhấ t. Ví dụ: union mytypes_t { char c; int i; float f; } mytypes;đ ị nh nghĩ a ba phầ n tử mytypes.c mỗ i phầ n tử có mộ t kiể u dữ liệ u khá c nhau. Như ng vì tấ t cả chú ng đ ề u nằ m cù ng mộ t chỗ trong bộ nhớ nê n bấ t kì sự thay đ ổ i nà o đ ố i vớ i mộ t phầ n tử sẽ ả nh hư ở ng tớ i tấ t cả cá c thà nh phầ n cò n lạ i. Mộ t trong nhữ ng cô ng dụ ng củ a union là dù ng đ ể kế t hợ p mộ t kiể u dữ liê u cơ bả n vớ i mộ t mả ng hay cá c cấ u trú c gồ m cá c phầ n tử nhỏ hơ n. Ví dụ: union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix;đ ị nh nghĩ a ba phầ n tử cho phé p chú ng ta truy xuấ t đ ế n cù ng mộ t nhó m 4 byte: mix.l , mix.s và mix.c mà chú ng ta có thể sử dụ ng tuỳ theo việ c chú ng ta muố n truy xuấ t đ ế n nhó m 4 byte nà y như thế nà o. Tô i dù ng nhiề u kiể u dữ liệ u khá c nhau, mả ng và cấ u trú c trong union đ ể bạ n có thể thấ y cá c cá ch khá c nhau mà chú ng ta có thể truy xuấ t dữ liệ u.
|