Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Chương 7. Lớp và đối tượng docx
Nội dung xem thử
Mô tả chi tiết
Ch ng 7. L p và đ i t ng ươ ớ ố ượ
CH NG 7 ƯƠ
LỚP VÀ ĐỐI TƯỢNG
L p trình có c u trúc và l p trình h ng đ i t ng ậ ấ ậ ướ ố ượ
L p và đ i t ng ớ ố ượ
Đ i c a ph ng th c - Con tr this ố ủ ươ ứ ỏ
Hàm t o (contructor) ạ
Hàm h y (destructor) ủ
Các hàm tr c tuy n (inline) ự ế
I. L P TRÌNH CÓ C U TRÚC VÀ L P TRÌNH H NG Đ I T NG Ậ Ấ Ậ ƯỚ Ố ƯỢ
1. Ph ng pháp l p trình c u trúc ươ ậ ấ
− L p trình c u trúc là t ch c ch ng trình thành các ch ng trình con. ậ ấ ổ ứ ươ ươ
Trong m t s ngôn ng nh PASCAL có 2 ki u ch ng trình con là th ộ ố ữ ư ể ươ ủ
t c và hàm, còn trong C++ ch có m t lo i ch ng trình con là hàm. ụ ỉ ộ ạ ươ
− Hàm là m t đ n v ch ng trình đ c l p dùng đ th c hi n m t ph n ộ ơ ị ươ ộ ậ ể ự ệ ộ ầ
vi c nào đó nh : Nh p s li u, in k t qu hay th c hi n m t s công ệ ư ậ ố ệ ế ả ự ệ ộ ố
vi c tính toán. Hàm c n có đ i và các bi n, m ng c c b dùng riêng cho ệ ầ ố ế ả ụ ộ
hàm.
− Vi c trao đ i d li u gi a các hàm th c hi n thông qua các đ i và các ệ ổ ữ ệ ữ ự ệ ố
bi n toàn c c. ế ụ
− M t ch ng trình c u trúc g m các c u trúc d li u (nh bi n, m ng, ộ ươ ấ ồ ấ ữ ệ ư ế ả
b n ghi) và các hàm, th t c. ả ủ ụ
− Nhi m v chính c a vi c t ch c thi t k ch ng trình c u trúc là t ệ ụ ủ ệ ổ ứ ế ế ươ ấ ổ
ch c ch ng trình thành các hàm, th t c. ứ ươ ủ ụ
Ví d , ta xét yêu c u sau: Vi t ch ng trình nh p to đ ( ụ ầ ế ươ ậ ạ ộ x,y) c a m t dãy ủ ộ
đi m, sau đó tìm m t c p đi m cách xa nhau nh t. ể ộ ặ ể ấ
Trên t t ng c a l p trình c u trúc có th t ch c ch ng trình nh sau: ư ưở ủ ậ ấ ể ổ ứ ươ ư
• S d ng 2 m ng th c toàn b ử ụ ả ự ộ x và y đ ch a to đ dãy đi m. ể ứ ạ ộ ể
• Xây d ng 2 hàm: ự
Hàm nhapsl dùng đ nh p to đ ể ậ ạ ộ n đi m, hàm này có m t đ i là bi n ể ộ ố ế
nguyên n và đ c khai báo nh sau: ượ ư
void nhapsl(int n);
212
Ch ng 7. L p và đ i t ng ươ ớ ố ượ
Hàm do_dai dùng đ tính đ dài đo n th ng đi qua 2 đi m có ch s là ể ộ ạ ẳ ể ỉ ố i và j,
nó đ c khai báo nh sau: ượ ư
float do_dai(int i, int j);
Ch ng trình C c a ví d trên đ c vi t nh sau: ươ ủ ụ ượ ế ư
#include <stdio.h>
#include <conio.h>
#include <math.h>
float x[100],y[100];
float do_dai(int i, int j)
{
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
}
void nhapsl(int n)
{
int i;
for (i=1; i<=n; ++i)
{
printf("\n Nhap toa do x, y cua diem thu %d : ",i);
scanf(''%f%f",&x[i],&y[i]);
}
}
void main()
{
int n, i, j, imax,jmax;
float d, dmax;
printf(''\n So diem N= '');
scanf(''%d'', &n);
nhapsl(n);
dmax=do_dai(1,2);imax=1; jmax=2;
for(i=1; i<=n-1; ++i)
for (j=i+1; j<=n; ++j)
{
d=do_dai(i,j);
213
Ch ng 7. L p và đ i t ng ươ ớ ố ượ
if (d>dmax)
{
dmax=d;
imax=i; jmax=j;
}
}
printf(''\nDoan thang lon nhat co do dai bang: %0.2f",dmax);
printf(''\n Di qua 2 diem co chi so la %d va %d'',imax,jmax);
getch();
}
2. Ph ng pháp l p trình h ng đ i t ng ươ ậ ướ ố ượ
Là l p trình có c u trúc + tr u t ng hóa d li u. Có nghĩa ch ng trình t ậ ấ ừ ượ ữ ệ ươ ổ
ch c d i d ng c u trúc. Tuy nhiên vi c thi t k ch ng trình s xoay quanh d ứ ướ ạ ấ ệ ế ế ươ ẽ ữ
li u, l y d li u làm trung tâm. Nghĩa là tr l i câu h i: Ch ng trình làm vi c ệ ấ ữ ệ ả ờ ỏ ươ ệ
v i nh ng đ i t ng d li u nào, trên các đ i t ng d li u này c n thao tác, th c ớ ữ ố ượ ữ ệ ố ượ ữ ệ ầ ự
hi n nh ng gì. T đó g n v i m i đ i t ng d li u m t s thao tác th c hiên c ệ ữ ừ ắ ớ ỗ ố ượ ữ ệ ộ ố ự ố
đ nh riêng c a đ i t ng d li u đó, đi u này s qui đ nh ch t ch h n nh ng ị ủ ố ượ ữ ệ ề ẽ ị ặ ẽ ơ ữ
thao tác nào đ c th c hi n trên đ i t ng d li u nào. Khác v i l p trình c u ượ ự ệ ố ượ ữ ệ ớ ậ ấ
trúc thu n túy, trong đó d li u đ c khai báo riêng r , tách r i v i thao tác x lý, ầ ữ ệ ượ ẽ ờ ớ ử
do đó vi c x lý d li u th ng không th ng nh t khi ch ng trình đ c xây ệ ử ữ ệ ườ ố ấ ươ ượ
d ng t nhi u l p trình viên khác nhau. ự ừ ề ậ
T đó l p trình h ng đ i t ng đ c xây d ng d a trên đ c tr ng chính là ừ ậ ướ ố ượ ượ ự ự ặ ư
khái ni m đóng gói. Đóng gói là khái ni m trung tâm c a ph ng pháp l p trình ệ ệ ủ ươ ậ
h ng đ i t ng, trong đó d li u và các thao tác x lý nó s đ c qui đ nh tr c ướ ố ượ ữ ệ ử ẽ ượ ị ướ
và "đóng" thành m t "gói" th ng nh t, riêng bi t v i các d li u khác t o thành ộ ố ấ ệ ớ ữ ệ ạ
ki u d li u v i tên g i là các l p. Nh v y m t l p không ch ch a d li u bình ể ữ ệ ớ ọ ớ ư ậ ộ ớ ỉ ứ ữ ệ
th ng nh các ki u d li u khác mà còn ch a các thao tác đ x lý d li u này. ườ ư ể ữ ệ ứ ể ử ữ ệ
Các thao tác đ c khai báo trong gói d li u nào ch x lý d li u trong gói đó và ượ ữ ệ ỉ ử ữ ệ
ng c l i d li u trong m t gói ch b tác đ ng, x lý b i thao tác đã khai báo ượ ạ ữ ệ ộ ỉ ị ộ ử ở
trong gói đó. Đi u này t o tính t p trung cao khi l p trình, m i đ i t ng trong ề ạ ậ ậ ọ ố ượ
m t l p s ch a cùng lo i d li u đ c ch đ nh và cùng đ c x lý b i các thao ộ ớ ẽ ứ ạ ữ ệ ượ ỉ ị ượ ử ở
tác nh nhau. M i l p trình viên khi làm vi c v i d li u trong m t gói đ u s ư ọ ậ ệ ớ ữ ệ ộ ề ử
d ng các thao tác nh nhau đ x lý d li u trong gói đó. C++ cung c p cách th c ụ ư ể ử ữ ệ ấ ứ
đ t o m t c u trúc d li u m i th hi n các gói nói trên, c u trúc d li u này ể ạ ộ ấ ữ ệ ớ ể ệ ấ ữ ệ
đ c g i là ượ ọ l pớ .
Đ minh ho các khái ni m v a nêu v kiêu d li u l p ta tr l i xét bài toán ể ạ ệ ừ ề ữ ệ ớ ở ạ
tìm đ dài l n nh t đi qua 2 đi m. Trong bài toán này ta g p m t th c th là dãy ộ ớ ấ ể ặ ộ ự ể
đi m. Các thành ph n d li u c a l p dãy đi m g m: ể ầ ữ ệ ủ ớ ể ồ
214
Ch ng 7. L p và đ i t ng ươ ớ ố ượ
• Bi n nguyên n là s đi m c a dãy ế ố ể ủ
• Con tr ỏ x ki u th c tr đ n vùng nh ch a dãy hoành đ ể ự ỏ ế ớ ứ ộ
• Con trỏ y ki u th c tr đ n vùng nh ch a dãy tung đ ể ự ỏ ế ớ ứ ộ
Các ph ng th c c n đ a vào theo yêu c u bài toán g m: ươ ứ ầ ư ầ ồ
• Nh p to đ m t đi m ậ ạ ộ ộ ể
• Tính đ dài đo n th ng đi qua 2 đi m ộ ạ ẳ ể
D i đây là ch ng trình vi t theo thi t k h ng đ i t ng. ướ ươ ế ế ế ướ ố ượ
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <alloc.h>
class daydiem
{
int n;
float *x,*y;
public:
float do_dai(int i, int j)
{
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2));
}
void nhapsl(void);
};
void daydiem::nhapsl(void)
{
int i;
printf(''\n So diem N= '');
scanf("%d'',&n);
x = (float*)malloc((n+1)*sizeof(float));
y = (float*)malloc((n+1)*sizeof(float));
for (i=1; i<=n; ++i)
{
printf(''\n Nhap toa do x, y cua diem thu %d : '',i);
215