DANH MỤC TÀI LIỆU
Tài liệu lập trình C+++ hữu ích dành cho người mới
5
lêi nãi ®Çu
LËp tr×nh cÊu tróc ph-¬ng ph¸p chøc, ph©n chia ch-¬ng tr×nh thµnh c¸c hµm, thñ tôc, chóng ®-îc dïng
®Ó xö lý liÖu nh-ng i t¸ch rêi c¸c cÊu tróc d÷ liÖu. Th«ng qua c¸c ng«n ng÷ Foxpro, Pascal, C ®a sè nh÷ng
ng-êi lµm Tin häc ®· kh¸ quen biÕt víi ph-¬ng ph¸p lËp tr×nh nµy.
LËp tr×nh h-íng ®èi t-îng dùa trªn viÖc chøc ch-¬ng tr×nh thµnh c¸c líp. Kh¸c víi hµm vµ thñ tôc, líp
mét ®¬n bao gåm liÖu c¸c ph-¬ng thøc lý. y líp thÓ c¸c thùc thÓ mét c¸ch ch©n
thùc, ®Çy ®ñ cphÇn liÖu yªu u qu¶n lý. T- t-ëng lËp tr×nh h-íng ®èi t-îng ®-îc ¸p dông cho hÇu hÕt
c¸c ng«n ng÷ míi ch¹y trªn m«i tr-êng Windows nh- Microsoft Access, Visual Basic, Visual C. vËy viÖc
nghiªn cøu ph-¬ng ph¸p lËp tr×nh míi nµy rÊt cÇn thiÕt ®èi víi tÊt cnh÷ng ng-êi quan t©m, yªu thÝch Tin
häc.
C ra ®êi n¨m 1973 víi môc ®Ých ban ®Çu ®Ó viÕt ®iÒu hµnh Unix trªn m¸y tÝnh mini PDP. Sau ®ã C ®·
®-îc dông réng r·i trªn nhiÒu lo¹i m¸y tÝnh kh¸c nhau ®· trë thµnh mét ng«n nlËp tr×nh u tróc rÊt
®-îc -a chuéng.
§Ó ®-a C vµo thÕ giíi h-íng h-íng ®èi t-îng, n¨m 1980 nhµ khoa häc ng-êi B. Stroustrup ®· cho ra ®êi
mét ng«n ng÷ C míi tªn ban ®Çu lµ “C líp”, sau ®ã ®Õn n¨m 1983 th× gäi C++. Ng«n ng÷ C++ mét
sù ph¸t triÓn m¹nh mÏ cña C. Trong C++ ch¼ng nh÷ng ®-a vµo tÊt c¶ c¸c kh¸i niÖm, c«ng cô cña lËp tr×nh h-íng
®èi t-îng mµ cßn ®-a vµo nhiÒu kh¶ n¨ng míi mÎ cho hµm. Nh- vËy C++ lµ mét ng«n ng÷ lai cho phÐp tæ chøc
ch-¬ng tr×nh theo c¸c líp vµ c¸c hµm. Cã thÓ nãi C++ ®· thóc ®Èy ng«n ng÷ C vèn ®· rÊt thuyÕt phôc ®i vµo thÕ
giíi lËp tr×nh h-íng ®èi t-îng vµ C++ ®· trë thµnh ng«n ng÷ h-íng ®èi t-îng næi bËt trong nh÷ng n¨m 90.
Cuèn s¸ch nµy sÏ tr×nh bÇy mét c¸ch hÖ thèng c¸c kh¸i niÖm cña lËp tr×nh h-íng ®èi t-îng ®-îc cµi ®Æt trong
C++ nh- líp, ®èi t-îng, thõa kÕ, tÝnh t-¬ng øng béi c kh¶ n¨ng míi trong x©y dùng, ng hµm nh-:
®èi tham chiÕu, ®èi mÆc ®Þnh, hµm trïng tªn, hµm to¸n tö. mét vÊn ®Ò cßn Ýt ®-îc biÕt ®Õn nh- c¸ch x©y
dùng hµm víi ®èi bÊt ®Þnh trong C còng ®-îc giíi thiÖu. C¸c ch-¬ng 1 ®Õn 10 víi c¸ch gi¶i thÝch
vµ víi gÇn 100 ch-¬ng tr×nh minh ho¹ cung cÊp cho b¹n ®äc c¸c kh¸i niÖm, ph-¬ng ph¸p kinh nghiÖm lËp
tr×nh h-íng ®èi t-îng trªn C++. Môc lôc cuèi s¸ch sÏ thèng ng¾n gän ph-¬ng ph¸p ph©n tÝch, thiÕt kÕ lËp
tr×nh h-íng ®èi t-îng trªn b×nh diÖn chung.
Cuèn s¸ch gåm 10 ch-¬ng vµ 6 phô lôc
Ch-¬ng 1 h-íng dÉn c¸ch lµm viÖc víi phÇn mÒm TC++ 3.0 ®Ó thö nghiÖm c¸c ch-¬ng tr×nh, tr×nh bÇy
l-îc vÒ c¸c ph-¬ng ph¸p lËp tr×nh vµ giíi thiÖu mét sè më réng ®¬n gi¶n cña C++ .
Ch-¬ng 2 tr×nh bÇy c¸c kh¶ n¨ng míi trong viÖc x©y dùng dông hµm trong C++ nh- biÕn tham chiÕu,
®èi cã kiÓu tham chiÕu, ®èi cã gi¸ trÞ mÆc ®Þnh, hµm trùc tuyÕn, hµm trïng tªn, hµm to¸n tö.
Ch-¬ng 3 nãi vÒ mét kh¸i niÖm trung t©m cña lËp tr×nh h-íng ®èi t-îng lµ líp gåm: §Þnh nghÜa líp, khai b¸o
c¸c biÕn, m¶ng ®èi t-îng (kiÓu líp), ph-¬ng thøc, dïng con trá this trong ph-¬ng thøc, ph¹m vi truy xuÊt cña
c¸c thµnh phÇn, c¸c ph-¬ng thøc to¸n tö.
Ch-¬ng 4 tr×nh bÇy c¸c vÊn ®Ò t¹o dùng, sao chÐp, huû bá c¸c ®èi t-îng vµ c¸c vÊn ®Ò kh¸c cã liªn quan nh-:
Hµm t¹o, hµm t¹o sao chÐp, hµm huû, to¸n tö g¸n, cÊp ph¸t bé nhí cho ®èi t-îng, hµm b¹n, líp b¹n.
Ch-¬ng 5 tr×nh bÇy mét kh¸i niÖm quan träng o nªn kh¶ n¨ng m¹nh cña lËp tr×nh h-íng ®èi t-îng trong
viÖc ph¸t triÓn, më réng phÇn mÒm, ®ã lµ kh¶ n¨ng thõa kÕ cña c¸c líp.
Ch-¬ng 6 tr×nh bÇy mét kh¸i niÖm quan träng kh¸c cho phÐp c¸c vÊn ®Ò kh¸c nhau, c¸c thùc thÓ kh¸c
nhau, c¸c thuËt to¸n kh¸c nhau theo cïng mét l-îc ®å thèng nhÊt, ®ã tÝnh t-¬ng øng béi ph-¬ng thøc ¶o.
C¸c c«ng cô nµy cho phÐp dÔ dµng tæ chøc ch-¬ng tr×nh qu¶n lý nhiÒu d¹ng ®èi t-îng kh¸c nhau.
Ch-¬ng 7 nãi viÖc chøc vµo - ra trong C++. C++ ®-a vµo mét kh¸i niÖm míi gäi c¸c dßng tin
(Stream). C¸c thao t¸c vµo - ra thùc hiÖn trao ®æi liÖu gi÷a nhí víi dßng tin: Vµo chuyÓn liÖu
dßng nhËp vµo nhí, ra chuyÓn liÖu nhí lªn dßng xuÊt. §Ó nhËp xuÊt liÖu trªn mét thiÕt
thÓ nµo, ta chØ cÇn g¾n dßng nhËp xuÊt víi thiÕt ®ã. ViÖc chøc vµo ra theo c¸ch nh- vËy rÊt khoa häc vµ
tiÖn lîi v× nã cã tÝnh ®éc lËp thiÕt bÞ.
Ch-¬ng 8 tr×nh bÇy c¸c hµm ®å ho¹ sö dông trong C vµ C++. C¸c hµm nµy ®-îc sö dông r¶i r¸c trong toµn bé
cuèn s¸ch ®Ó x©y dùng c¸c ®èi t-îng ®å ho¹.
Ch-¬ng 9 tr×nh bÇy c¸c hµm truy xuÊt trùc tiÕp vµo nhí cña m¸y tÝnh, trong ®ã nhí mµn h×nh. C¸c
hµm nµy sÏ ®-îc sö dông trong ch-¬ng 10 ®Ó x©y dùng c¸c líp menu vµ cöa sæ .
6
Ch-¬ng 10 giíi thiÖu 5 ch-¬ng tr×nh t-¬ng ®èi hoµn chØnh nh»m minh ho¹ thªm kh¶ n¨ng thuËt p
tr×nh h-íng ®èi t-îng trªn C++
Phô lôc 1 tr×nh bÇy c¸c phÐp to¸n trong C++ vµ thø tù -u cña chóng.
Phô lôc 2 liÖt kª mét danh s¸ch c¸c tõ kho¸ cña C++.
Phô lôc 3 tr×nh bÇy b¶ng m· ASCII vµ m· quÐt cña c¸c ký tù.
Phô lôc 4 tr×nh bÇy mét vÊn ®Ò quan träng nh-ng cßn Ýt ®-îc nãi ®Õn trong c¸c tµi liÖu, ®ã c¸ch dông
con trá void ®Ó x©y dùng c¸c hµm víi sè ®èi kh«ng cè ®Þnh gièng nh- c¸c hµm printf vµ scanf cña C.
trong C++ vÉn dông c¸c hµm cña C, nªn trong phô lôc 5 giíi thiÖu tãm t¾t h¬n 200 hµm ®Ó b¹n ®äc
tiÖn viÖc tra cøu.
Cuèi cïng, phô lôc 6 tr×nh bÇy mét c¸ch ng¾n gän ph-¬ng ph¸p ph©n tÝch, thiÕt p tr×nh h-íng ®èi
t-îng trªn b×nh diÖn chung.
Khi viÕt chóng t«i ®· hÕt søc g¾ng ®Ó cuèn s¸ch ®-îc hoµn chØnh, song ch¾c ch¾n kh«ng tr¸nh khái thiÕu
sãt, v× vËy rÊt mong nhËn ®-îc sù gãp ý cña ®éc gi¶.
Nh©n dÞp nµy chóng t«i xin ch©n thµnh c¸m ¬n cö nh©n NguyÔn V¨n Ph¸c ®· tËn t×nh gióp ®ì trong viÖc hiÖu
®Ýnh vµ biªn tËp cuèn s¸ch nµy.
T¸c gi¶
7
Chương 1
C++ và lập trình hướng đối tượng
Trong chương này trình bầy các vấn đề sau:
- Cách sử dụng phần mềm TC++ 3.0
- Những sửa đổi cần thiết một chương trình C để biến nó thành một chương trình C++ (chạy được trong môi
trường C++)
- Tóm lược về các phương pháp lập trình cấu trúc và lập trình hướng đối tượng
- Những mở rộng của C++ so với C
§ 1. Làm việc với TC++ 3.0
Các dụ trong cuốn sách này sviết thực hiện trên môi trường TC++ 3.0. Bộ cài đặt TC++ 3.0 gồm 5
đĩa. Sau khi cài đặt (giả sử vào thư mục C:\TC) thì trong thư mục TC sẽ gồm các thư mục con sau:
C:\TC\BGI chứa các tệp đuôi BGI và CHR
C:\TC\BIN chứa các tệp chương trình (đuôi EXE) như TC, TCC, TLIB, TLINK
C:\TC\INCLUDE chứa các tệp tiêu đề đuôi H
C:\TC\LIB chứa các tệp đuôi LIB, OBJ
Để vào môi trường của TC++ chỉ cần thực hiện tệp chương trình TC trong thư mục C:\TC\BIN . Kết quả
nhận được hệ menu chính của TC++ với mầu nền xanh gần giống như hệ menu quen thuộc của TC (Turbo C).
Hệ menu của TC++ gồm các menu: File, Edit, Search, Run, Compile, Debug, Project, Options, Window, Help.
Cách soạn thảo, biên dịch chạy chương trình trong TC++ cũng giống ntrong TC, ngoại trừ điểm sau:
Tệp chương trình trong hệ soạn thảo của TC++ có đuôi mặc định là CPP còn trong TC thì tệp chương trình luôn
có đuôi C.
Trong TC++ thể thực hiện cả chương trình C C++. Để thực hiện chương trình C cần dùng đuôi C để
đặt tên cho tệp chương trình, để thực hiện chương trình C++ cần dùng đuôi CPP để đặt tên cho tệp chương
trình.
§ 2. C và C++
- thể nói C++ sự mở rộng (đáng kể) của C. Điều đó nghĩa mọi khả năng, mọi khái niệm trong C
đều dùng được trong C++.
- trong C++ sử dụng gần như toàn bộ các khái niệm, định nghĩa, các kiểu dữ liệu, các cấu trúc lệnh, các
hàm các công cụ khác của C, nên yêu cầu bắt buộc đối với các đọc giả C++ phải biết sử dụng tương đối
thành thạo ngôn ngữ C.
- Vì C++ là sự mở rộng của C, nên bản thân một chương trình C đã là chương trình C++ (chỉ cần thay đuôi C
bằng đuôi CPP). Tuy nhiên Trình biên dịch TC++ yêu cầu mọi hàm chuẩn dùng trong chương trình đều phải
khai báo nguyên mẫu bằng một câu lệnh #include, trong khi điều này không bắt buộc đối với Trình biên dịch
của TC.
Trong C thể dùng một hàm chuẩn bỏ qua câu lệnh #include để khai báo nguyên mẫu của hàm được
dùng. Điều này không báo lỗi khi biên dịch, nhưng có thể dẫn đến kết quả sai khi chạy chương trình.
d khi biên dịch chương trình sau trong môi trường C sẽ không gặp các dòng cảnh báo (Warning)
thông báo lỗi (error). Nhưng khi chạy sẽ nhận được kết quả sai.
#include <stdio.h>
void main()
{
float a,b,c,p,s;
printf("\nNhap a, b, c ");
scanf("%f%f%f",&a,&b,&c);
8
p=(a+b+c)/2;
s= sqrt(p*(p-a)*(p-b)*(p-c));
printf("\nDien tich = %0.2f",s);
getch();
}
Nếu biên dịch chương trình này trong TC++ sẽ nhận được các thông báo lỗi sau:
Eror: Funtion ‘sqrt’ should have a prototype
Eror: Funtion ‘getch’ should have a prototype
Để biến chương trình trên thành một chương trình C++ cần:
+ Đặt tên chương chường với đuôi CPP
+ Thêm 2 câu lệnh #include để khai báo nguyên mẫu cho các hàm sqrt, getch:
#include <math.h>
#include <conio.h>
§ 3. Lập trình cấu trúc và lập trình hướng đối tượng
3.1. Phương pháp lập trình cấu trúc
- tưởng chính của lập trình cấu trúc tổ chức chương trình thành các chương trình con. Trong PASCAL
có 2 kiểu chương trình con là thủ tục và hàm. Trong C chỉ có một loại chương trình con là hàm.
Hàm 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ố 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 bộ.
Các ngôn ngữ như C, PASCAL, FOXPRO các ngôn ngữ cho phép triển khai phương pháp lập trình cấu
trú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 tổ chức chương trình thành các hàm, thủ
tục: Chương trình sẽ bao gồm các hàm, thủ tục nào.
Ví d 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);
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 cho bài toán 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));
}
9
void nhapsl(int n)
{
int i;
for (i=1;i<=n;++i)
{
printf("\nNhap 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("\nSo 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);
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();
}
3.2. Phương pháp lập trình hướng đối tượng
+ Khái niệm trung tâm của lập trình hướng đối tượng lớp (class). thể xem lớp sự kết hợp các thành
phần dữ liệu các hàm. Cũng thxem lớp sự mở rộng của cấu trúc trong C (struct) bằng cách đưa thêm
vào các phương thức (method) hay còn gọi là hàm thành viên (member function). Một lớp được định nghĩa như
sau:
class Tên_Lớp
{
// Khai báo các thành phần dữ liệu
// Khai báo các phương thức
};
+ Các phương thức thđược viết (xây dựng) bên trong hoặc bên ngoài (phía dưới) phần định nghiã lớp.
Cấu trúc (cách viết) phương thức tương tự như hàm ngoại trừ quy tắc sau: Khi y dựng một phương thức bên
10
ngoài định nghĩa lớp thì trong dòng đầu tiên cần dùng tên lớp 2 dấu : đặt trước tên phương thức để chỉ
phương thức thuộc lớp nào (xem ví dụ bên dưới).
+ Sử dụng các thành phần dữ liệu trong phương thức: phương thức các thành phần dữ liệu thuộc cùng
một lớp và vì phương thức được lập lên cốt để xử lý các thành phần dữ liệu, nên trong thân của phương thức
quyền truy nhập đến các thành phần dữ liệu (của cùng lớp).
+ Biến lớp: Sau khi định nghĩa một lớp, có thể dùng tên lớp để khai báo các biến kiểu lớp hay còn gọi là đối
tượng. Mỗi đối tượng sẽ các thành phần dữ liệu các phương thức. Lời gọi một phương thức cần chứa tên
đối tượng để xác định phương thức thực hiện từ đối tượng nào.
+ Một chương trình hướng đối tượng sẽ bao gồm các lớp có quan hệ với nhau.
+ Việc phân tích, thiết kế chương trình theo phương pháp hướng đối tượng nhằm thiết kế, xây dựng các lớp.
+ Từ khái niệm lớp nẩy sinh hàng loạt khái niệm khác như: Thành phần dữ liệu, phương thức, phạm vi, sự
đóng gói, hàm tạo, hàm huỷ, sự thừa kế, lớp cơ sử, lớp dẫn xuất, tương ứng bội, phương thức ảo, ...
+ Ưu điểm của việc thiết kế hướng đối tượng tập trung xác định các lớp để tả các thực thcủa bài
toán. Mỗi lớp đưa vào các thành phần dữ liệu của thực thể xây dựng luôn các phương thức để xlý dữ liệu.
Như vậy việc thiết kế chương trình xuất phát từ các nội dụng, các vấn đề của bài toán.
+ Các ngôn ngữ thuần tuý hướng đối tượng (như Smalltalk) chỉ hỗ trợ các khái niệm về lớp, không các
khái niệm hàm.
+ C++ là ngôn ngữ lai , nó cho phép sử dụng cả các công cụ của lớp và hàm.
Để minh hoạ các khái niệm vừa nêu về lập trình hướng đối tượng 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:
- 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. Để thực hiện chương trình này nhớ đặt tên tệp
có đuôi CPP. Xem chương trình ta thấy thêm một điều mới trong C++ là:
Các khai báo biến, mảng thể viết bất kỳ chỗ nào trong chương trình (tất nhiên phải trước khi sử dụng
biến, mảng).
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <alloc.h>
class daydiem
{
public:
int n;
float *x,*y;
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)
{
thông tin tài liệu
một tài liệu về lập trình C hữu ích mà bạn không thể bỏ qua
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×