Xem mẫu

  1. Updatesofts.com Ebooks Team g = (*functocall)(x,y); return (g); } int main () { int m,n; m = operation (7, 5, &addition); n = operation (20, m, minus); cout
  2. Updatesofts.com Ebooks Team B nh ñ ng Cho ñ n nay, trong các chương trình c a chúng ta, t t c nh ng ph n b nh chúng ta có th s d ng là các bi n các m ng và các ñ i tư ng khác mà chúng ta ñã khai báo. Kích c c a chúng là c ñ nh và không th thay ñ i trong th i gian chương trình ch y. Nhưng n u chúng ta c n m t lư ng b nh mà kích c c a nó ch có th ñư c xác ñ nh khi chương trình ch y, ví d như trong trư ng h p chúng ta nh n thông tin t ngư i dùng ñ xác ñ nh lư ng b nh c n thi t. Gi i pháp ñây chính là b nh ñ ng, C++ ñã tích h p hai toán t new và delete ñ th c hi n vi c này Hai toán t new và delete ch có trong C++. ph n sau c a bài chúng ta s bi t nh ng thao tác tương ñương v i các toán t này trong C. Toán t new và new[ ] ð có th có ñư c b nh ñ ng chúng ta có th dùng toán t new. Theo sau toán t này là tên ki u d li u và có th là s ph n t c n thi t ñư c ñ t trong c p ngo c vuông. Nó tr v m t con tr tr t i ñ u c a kh i nh v a ñư c c p phát. D ng th c c a toán t này như sau: pointer = new type ho c pointer = new type [elements] Bi u th c ñ u tien ñư c dùng ñ c p phát b nh ch a m t ph n t có ki u type. L nh th hai ñư c dùng ñ c p phát m t kh i nh (m t m ng) g m các ph n t ki u type. Ví d : int * bobby; bobby = new int [5]; trong trư ng h p này, h ñi u hành dành ch cho 5 ph n t ki u int trong b nh và tr v m t con tr tr ñ n ñ u c a kh i nh . Vì v y lúc này bobby tr ñ n m t kh i nh h p l g m 5 ph n t int. B n có th h i tôi là có gì khác nhau gi a vi c khai báo m t m ng v i vi c c p phát b nh cho m t con tr như chúng ta v a làm. ði u quan tr ng nh t là kích thư c c a m t Trang 65
  3. Updatesofts.com Ebooks Team m ng ph i là m t h ng, ñi u này gi i h n kích thư c c a m ng ñ n kích thư c mà chúng ta ch n khi thi t k chương trình trong khi ñó c p phát b nh ñ ng cho phép c p phát b nh trong quá trình ch y v i kích thư c b t kì. B nh ñ ng nói chung ñư c qu n lí b i h ñi u hành và trong các môi trư ng ña nhi m có th ch y m t lúc vài chương trình có m t kh năng có th x y ra là h t b nh ñ c p phát. N u ñi u này x y ra và h ñi u hành không th c p phát b nh như chúng ta yêu c u v i toán t new, m t con tr null (zero) s ñư c tr v . Vì v y các b n nên ki m tra xem con tr tr v b i toán t new có b ng null hay không: int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. }; Toán t delete. Vì b nh ñ ng ch c n thi t trong m t kho ng th i gian nh t ñ nh, khi nó không c n dùng ñ n n a thì nó s ñư c gi i phóng ñ có th c p phát cho các nhu c u khác trong tương lai. ð th c hi n vi c này ta dùng toán t delete, d ng th c c a nó như sau: delete pointer; ho c delete [] pointer; Bi u th c ñ u tiên nên ñư c dùng ñ gi i phóng b nh ñư c c p phát cho m t ph n t và l nh th hai dùng ñ gi i phóng m t kh i nh g m nhi u ph n t (m ng). Trong h u h t các trình d ch c hai bi u th c là tương ñương m c dù chúng là rõ ràng là hai toán t khác nhau. How many numbers do you want to // rememb-o-matic type in? 5 #include Enter number : 75 #include Enter number : 436 Enter number : 1067 int main () Enter number : 8 { Enter number : 32 char input [100]; You have entered: 75, 436, 1067, 8, int i,n; 32, long * l, total = 0; cout
  4. Updatesofts.com Ebooks Team cout
  5. Updatesofts.com Ebooks Team Hàm calloc. calloc ho t ñ ng r t gi ng v i malloc, s khác nhau ch y u là khai báo m u c a nó: void * calloc (size_t nelements, size_t size); nó s d ng hai tham s thay vì m t. Hai tham s này ñư c nhân v i nhau ñ có ñư c kích thư c t ng c ng c a kh i nh c n c p phát. Thông thư ng tham s ñ u tiên (nelements) là s ph n t và tham s th c hai (size) là kích thư c c a m i ph n t . Ví d , chúng ta có th ñ nh nghĩa bobby v i calloc như sau: int * bobby; bobby = (int *) calloc (5, sizeof(int)); M t ñi m khác nhau n a gi a malloc và calloc là calloc kh i t o t t c các ph n t c a nó v 0. Hàm realloc. Nó thay ñ i kích thư c c a kh i nh ñã ñư c c p phát cho m t con tr . void * realloc (void * pointer, size_t size); tham s pointer nh n vào m t con tr ñã ñư c c p phát b nh hay m t con tr null, và size ch ñ nh kích thư c c a kh i nh m i. Hàm này s c p phát size byte b nh cho con tr . Nó có th ph i thay ñ i v v trí c a kh i nh ñ có th ñ ch cho kích thư c m i c a kh i nh , trong trư ng h p này n i dung hi n th i c a kh i nh ñư c copy t i v trí m i ñ ñ m b o d li u không b m t. Con tr m i tr t i kh i nh ñư c hàm tr v . N u không th thay ñ i kích thư c c a kh i nh thì hàm s tr v m t con tr null nhưng tham s pointer và n i dung c a nó s không b thay ñ i. Hàm free. Hàm này gi i phóng m t kh i nh ñ ng ñã ñư c c p phát b i malloc, calloc ho c realloc. void free (void * pointer); Hàm này ch ñư c dùng ñ gi i phóng b nh ñư c c p phát b i các hàm malloc, and realloc. calloc Trang 68
  6. Updatesofts.com Ebooks Team Các c u trúc Các c u trúc d li u. M t c u trúc d li u là m t t p h p c a nh ng ki u d li u khác nhau ñư c g p l i v i m t cái tên duy nh t. D ng th c c a nó như sau: struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name; trong ñó model_name là tên c a m u ki u d li u và tham s tùy ch n object_name m t tên h p l cho ñ i tư ng. Bên trong c p ngo c nh n là tên các ph n t c a c u trúc và ki u c a chúng. N u ñ nh nghĩa c a c u trúc bao g m tham s model_name (tuỳ ch n), tham s này tr thành m t tên ki u h p l tương ñương v i c u trúc. Ví d : struct products { char name [30]; float price; }; products apple; products orange, melon; Chúng ta ñã ñ nh nghĩa c u trúc products v i hai trư ng: name và price, m i trư ng có m t ki u khác nhau. Chúng ta cũng ñã s d ng tên c a ki u c u trúc (products) ñ khai báo ba ñ i tư ng có ki u ñó : apple, orange và melon. Sau khi ñư c khai báo, products tr thành m t tên ki u h p l gi ng các ki u cơ b n như int, char hay short. Trư ng tuỳ ch n object_name có th n m cu i c a ph n khai báo c u trúc dùng ñ khai báo tr c ti p ñ i tư ng có ki u c u trúc. Ví d , ñ khai báo các ñ i tư ng apple, orange và melon như ñã làm ph n trư c chúng ta cũng có th làm theo cách sau: struct products { char name [30]; float price; } apple, orange, melon; Hơn n a, trong trư ng h p này tham s model_name tr thành tuỳ ch n. M c dù n u model_name không ñư c s d ng thì chúng ta s không th khai báo thêm các ñ i tư ng có ki u m u này. Trang 69
  7. Updatesofts.com Ebooks Team M t ñi u quan tr ng là c n phân bi t rõ ràng ñâu là ki u m u c u trúc, ñâu là ñ i tư ng c u trúc. N u dùng các thu t ng chúng ta ñã s d ng v i các bi n, ki u m u là tên ki u d li u còn ñ i tư ng là các bi n. Sau khi ñã khai báo ba ñ i tư ng có ki u là m t m u c u trúc xác ñ nh (apple, orange and melon) chúng ta có th thao tác v i các trư ng t o nên chúng. ð làm vi c này chúng ta s d ng m t d u ch m (.) chèn gi a tên ñ i tư ng và tên trư ng. Ví d , chúng ta có th thao tác v i b t kì ph n t nào c a c u trúc như là ñ i v i các bi n chu n : apple.name apple.price orange.name orange.price melon.name melon.price m i trư ng có ki u d li u tương ng: apple.name, orange.name và melon.name có ki u char[30], và apple.price, orange.price và melon.price có ki u float. Chúng ta t m bi t apples, oranges và melons ñ ñ n v i m t ví d v các b phim: Enter title: Alien // example about structures Enter year: 1979 #include #include My favourite movie is: #include 2001 A Space Odyssey (1968) And yours: struct movies_t { Alien (1979) char title [50]; int year; } mine, yours; void printmovie (movies_t movie); int main () { char buffer [50]; strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968; cout
  8. Updatesofts.com Ebooks Team return 0; } void printmovie (movies_t movie) { cout