Xem mẫu
- 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
- 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
- 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
- Updatesofts.com Ebooks Team
cout
- 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
- 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
- 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
- Updatesofts.com Ebooks Team
return 0;
}
void printmovie (movies_t movie)
{
cout
nguon tai.lieu . vn