Xem mẫu
- Updatesofts.com Ebooks Team
for (n=0; n
- 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
- 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
- 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
- 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
- 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
- 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
nguon tai.lieu . vn