Xem mẫu

  1. Updatesofts.com Ebooks Team for (n=0; n
  2. Updatesofts.com Ebooks Team cout title; cout title nó có th ñư c d ch thành: (*movies).title c hai bi u th c movies->title và (*movies).title ñ u h p l và chúng ñ u dùng ñ tham chi u ñ n ph n t title c a c u trúc ñư c tr b i movies. B n c n phân bi t rõ ràng v i: *movies.title nó tương ñương v i *(movies.title) l nh này dùng ñ tính toán giá tr ñư c tr b i ph n t title c a c u trúc movies, trong trư ng h p này (title không ph i là m t con tr ) nó ch ng có ý nghĩa gì nhi u. B n dư i ñây t ng k t t t c các k t h p có th ñư c gi a con tr và c u trúc: Bi u th c Mô t Tương ñương v i Ph n t title c a c u trúc movies movies.title Ph n t title c a c u trúc ñư c tr b i movies movies->title (*movies).title Giá tr ñư c tr b i ph n t title c a c u trúc *movies.title *(movies.title) movies 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]; Trang 73
  3. Updatesofts.com Ebooks Team 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 maria.favourite_movie.title charlie.favourite_movie.year pfriends->favourite_movie.year (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 Trang 74
  4. Updatesofts.com Ebooks Team Các ki u d li u t ñ 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; typedef unsigned int WORD; typedef char * string_t; typedef char field [50]; 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; WORD myword; string_t ptchar2; field name; ñ nh nghĩa m t ki u d li u ñư c dùng l p ñi l p typedef có th h u d ng khi b n mu n 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: union model_name { type1 element1; type2 element2; type3 element3; . . } object_name; Trang 75
  5. Updatesofts.com Ebooks Team 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 mytypes.i mytypes.f 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. Các unions vô danh Trong C++ chúng ta có th s d ng các unions vô danh. N u chúng ta ñ t m t union trong m t c u trúc mà không ñ tên (ph n ñi sau c p ngo c nh n { }) union s tr thành vô danh và chúng ta có th truy xu t tr c ti p ñ n các ph n t c a nó mà không c n ñ n tên c a union (có c n cũng không ñư c). Ví d , hãy xem xét s khác bi t gi a hai ph n khai báo sau ñây: union union vô danh Trang 76
  6. Updatesofts.com Ebooks Team struct { struct { char title[50]; char title[50]; char author[50]; char author[50]; union { union { float dollars; float dollars; int yens; int yens; } price; }; } book; } book; S khác bi t duy nh t gi a hai ño n mã này là trong ño n mã ñ u tiên chúng ta ñ t tên cho union (price) còn trong cái th hai thì không. Khi truy nh p vào các ph n t dollars và yens, trong trư ng h p th nh t chúng ta vi t: book.price.dollars book.price.yens còn trong trư ng h p th hai: book.dollars book.yens M t l n n a tôi nh c l i r ng vì nó là m t union, hai trư ng dollars và yens ñ u chi m cùng m t ch trong b nh nên chúng không th gi hai giá tr khác nhau. Ki u li t kê (enum) Ki u d li u li t kê dùng ñ t o ra các ki u d li u ch a m t cái gì ñó hơi ñ c bi t m t chút, không ph i ki u s hay ki u kí t ho c các h ng true và false. D ng th c c a nó như sau: enum model_name { value1, value2, value3, . . } object_name; Ví d , chúng ta có th t o ra m t ki u d li u m i có tên color ñ lưu tr các màu v i ph n khai báo như sau: enum colors_t {black, blue, green, cyan, red, purple, yellow, white}; Chú ý r ng chúng ta không s d ng b t kì m t ki u d li u cơ b n nào trong ph n khai báo. Chúng ta ñã t o ra m t ki u d li u m i mà không d a trên b t kì ki u d li u nào có s n: ki u color_t, nh ng giá tr có th c a ki u color_t ñư c vi t trong c p ngo c nh n {}. Ví d , sau khi khai báo ki u li t kê, bi u th c sau s là h p l : colors_t mycolor; mycolor = blue; if (mycolor == green) mycolor = red; Trang 77
  7. Updatesofts.com Ebooks Team Trên th c t ki u d li u li t kê ñư c d ch là m t s nguyên và các giá tr c a nó là các h ng s nguyên ñư c ch ñ nh. N u ñi u này không ñ oc ch ñ nh, giá tr nguyên tương ñương v i ph n t ñ u tiên là 0 và các giá tr ti p theo c th tăng lên 1, Vì v y, trong ki u d li u colors_t mà chúng ta ñ nh nghĩa trên, white tương ñương v i 0, blue tương ñương v i 1, green tương ñương v i 2 và c ti p t c như th . N u chúng ta ch ñ nh m t giá tr nguyên cho m t giá tr nào ñó c a ki u d li u li t kê (trong ví d này là ph n t ñ u tiên) các giá tr ti p theo s là các giá tr nguyên ti p theo, ví d : enum months_t { january=1, february, march, april, may, june, july, august, september, october, november, december} y2k; trong trư ng h p này, bi n y2k có ki u d li u li t kê months_t có th ch a m t trong 12 giá tr t january ñ n december và tương ñương v i các giá tr nguyên t 1 ñ n 12, không ph i 0 ñ n 11 vì chúng ta ñã ñ t january b ng 1. Trang 78