Cấu trúc trong C++ • Một ấu trúc dữ liệu là ột tập hợp ủa hữ g kiểu dữ liệu khác nhau đượ gộp lại với ột cái tên duy hất... • Trong đó model_name là tên ủa ẫu kiểu dữ liệu và tham số tù
Trang 1KỸ THU T L P TRÌNH H C ĐI N TỬ Programming Engineering in Mechatronics
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
UNIVERSITY OF SCIENCE AND TECHNOLOGY
1
Trang 2Chapter 7 The structure in C++
1 C sở cấu trúc trong C++
CHƯ NG 7 Cấu trúc trong C++
• Một ấu trúc dữ liệu là ột tập hợp ủa hữ g kiểu dữ liệu
khác nhau đượ gộp lại với ột cái tên duy hất Dạ g thứ
ủa nó hư sau:
1.1 Các cấu trúc dữ li u trong C++
struct model_name {
type1 element1 ; type2 element2 ;
type3 element3 ; …
Trang 3• Trong đó model_name là tên ủa ẫu kiểu dữ liệu và tham số
tùy họ object_name ột tên hợp lệ cho đối tượ g Bêntrong ặp goặ họ là tên các phầ tử ủa ấu trúc và kiểu
ủa chúng
số model_name tuỳ họ , tham số này t ở thành ột tênkiểu hợp lệ tươ g đươ g với ấu trúc Ví dụ:
struct products {char name [30];
float price;
} ;products apple;
products orange, melon;
Trang 4• Chúng ta đ đị h ghĩa ấu trúc products với hai
t ườ g: name và price, ỗi t ườ g có ột kiểu khác nhau.Chúng ta ũ g đ sử dụ g tên ủa kiểu ấu trúc (products) đểkhai báo ba đối tượ g có kiểu đó : apple, orange và melon
• Sau khi đượ khai báo, products t ở thành ột tên kiểu hợp lệgiố g các kiểu ơ ả hư int, char hay short
• T ườ g tuỳ họ object_name có thể ằ ở uối ủa phầ khai
báo ấu trúc dùng để khai báo t ự tiếp đối tượ g có kiểu ấutrúc Ví dụ, để khai báo các đối tượ g apple, orange vàmelon hư đ làm ở phầ t ướ chúng ta ũ g có thể làm theocách sau:
Trang 5struct products {char name [30];
float price;
} apple, orange, melon;
thành tuỳ họ Mặ dù ếu model_name không đượ sử dụ gthì chúng ta sẽ không thể khai báo thêm các đối tượ g có kiểu
ẫu này
1.2 Kiểu m u cấu trúc
• Một điều quan t ọ g là ầ phân iệt rõ ràng đ u là kiểu
ẫu ấu trúc, đ u là đối tượ g ấu trúc Nếu dùng các thuật
gữ chúng ta đ sử dụ g với các iế , kiểu ẫu là tên kiểu dữliệu còn đối tượ g là các iế
Trang 6• Sau khi đ khai báo ba đối tượ g có kiểu là ột ẫu ấu trúcxác đị h (apple, orange and melon) chúng ta có thể thao tácvới các t ườ g tạo nên chúng Để làm việ này chúng ta sử
dụ g ột dấu hấ (.) chèn ở giữa tên đối tượ g và tên
t ườ g Ví dụ, chúng ta có thể thao tác với ất kì phầ tử nào
ủa ấu trúc hư là đối với các iế huẩ :
• apple.nameapple.priceorange.nameorange.pricemelon.namemelon.price
ứ g: apple.name, orange.name và melon.name cókiểu char[30], và apple.price,orange.price và melon.price cókiểu float
Trang 7• Ví dụ:
Trang 8Kết uả:
Enter title: AlienEnter year: 1979 My favourite movie is: 2001 A Space Odyssey (1968)And yours: Alien (1979)
• Ví dụ này:
- Cho chúng ta thấy cách sử dụ g các phầ tử ủa ột ấu
dụ,yours.year là ột iế hợp lệ có kiểu int ũ g
hư mine.title là ột ả g hợp lệ với 50 phầ tử kiểu chars
- Chú ý ằ g ả mine and yours đều đượ coi là các iếhợp lệ kiểu movie_t khi đượ t uyề cho hàm printmovie().Hơ
ữa ột lợi thế quan t ọ g ủa ấu trúc là chúng ta có thể xét cácphầ tử ủa chúng ột cách riêng iệt hoặ toàn ộ ấu trúc hư
ột khối
Trang 9• Các ấu trúc đượ sử dụ g ất hiều để xây dự g ơ sở dữ liệu
đặ iệt ếu chúng ta xét đế khả ă g xây dự g các ả g
ủa chúng
Trang 10Kết uả:
Enter title: AlienEnter year: 1979Enter title: Blade RunnerEnter year: 1982Enter title: MatrixEnter year: 1999Enter title: Rear
WindowEnter year: 1954Enter title: Taxi DriverEnter
year: 1975 You have entered these movies:Alien (1979)Blade Runner (1982)Matrix (1999)Rear Window (1954)Taxi Driver
(1975)
2 Con trỏ trỏ đến cấu trúc
• Như ất kì các kiểu dữ liệu nào khác, các ấu trúc có thể đượ
t ỏ đế ởi con t ỏ Quy tắ hoàn toàn giố g hư đối với ất kìkiểu dữ liệu ơ ả nào:
Trang 11• Ở đ y amovie là ột đối tượ g có kiểu movies_t và pmovie là
ột con t ỏ t ỏ tới đối tượ g movies_t OK, bây giờ chúng ta
sẽ đế với ột ví dụ khác, nó sẽ giới thiệu ột toán tử ới:
Trang 13Kết uả:
Enter title: MatrixEnter year: 1999 You have entered:Matrix
(1999)
• Đoạ mã trên giới thiệu ột điều quan t ọ g: toán tử ->. Đ y
là ột toán tử tham hiếu hỉ dùng để t ỏ tới các ấu trúc và
các lớp (class) Nó cho phép chúng ta không phải dùng goặ
ỗi khi tham hiếu đế ột phầ tử ủa ấu trúc Trong ví dụnày chúng ta sử dụ g:
movies->title
nó có thể đượ dị h thành:
(*movies).title
Trang 14• Cả hai iểu thứ movies->title và (*movies).title đều hợp lệ vàchúng đều dùng để tham hiếu đế phầ tử title ủa ấu trúcđượ t ỏ ởi movies Bạ ầ phân iệt rõ ràng với:
*movies.title
ó tươ g đươ g với
*(movies.title)
• Lệ h này dùng để tính toán giá t ị đượ t ỏ ởi phầ
tử title ủa ấu trúc movies, trong t ườ g hợp này (title khôngphải là ột con t ỏ nó hẳ g có ý ghĩa gì hiều Bả dưới đ y
tổ g kết tất ả các kết hợp có thể đượ giữa con t ỏ và ấutrúc:
Trang 15Các kết uả kết hợp giữa con t ỏ và ấu trúc
3 Các cấu trúc lồng nhau
• Các ấu trúc có thể đượ đặt lồ g nhau vì vậy ột phầ tử hợp
lệ ủa ột ấu trúc có thể là ột ấu trúc khác
Trang 16friends_t * pfriends = &charlie;
• Vì vậy, sau phầ khai báo trên chúng ta có thể sử dụ g các iểuthứ sau:
Trang 17charlie.namemaria.favourite_movie.titlecharlie.favourite_movie.yearpfriends->favourite_movie.year
t o g đó hai iểu thứ uối ù g là tươ g đươ g
này là hoàn toàn giố g với ngôn gữ C, tuy nhiên trong C++,
tính hất đặ t ư g là tất ả các phầ tử ủa nó đều là công
ộ g (public)