Giáo trình Lập trình Hướng đối tượng | Trường Đại học Bách Khoa Hà Nội

Giáo trình được chia ra làm 17 chương và mỗi chương được chia làm các mục khác nhau. Các chương được sắp xếp theo trình tự từ lập trình hướng thủ tục trên C++ đến lập trình hướng đối tượng và các lớp thư viện cơ bản. 

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Trang | 1
ĐẶNG NGỌC HOÀNG TNH
LẬP TRÌNH HƯỚNG
ĐỐI TƯỢNG
Tài liu hc tp
C
++
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 2
C++
PH LC
GII THIU .............................................................................................................7
MÔI TRƯỜNG PHÁT TRIN TÍCH HP IDE ................................................... 10
CHƯƠNG 1. CƠ BẢN V C++ ............................................................................ 23
CHƯƠNG 2. BIN VÀ CÁC KIU D LIU ..................................................... 26
T khóa ................................................................................................................................ 26
Kiu d liu nguyên thy .............................................................................................. 27
Khai báo biến ..................................................................................................................... 28
Phm vi tác dng ca biến ............................................................................................ 29
Khi to giá tr cho biến ................................................................................................ 30
Khi to giá tr cho biến tĩnh static .......................................................................... 31
Gii thiu v xâu kí t .................................................................................................... 32
CHƯƠNG 3. HNG .............................................................................................. 34
Hng s nguyên ................................................................................................................. 34
Hng s thc có du chấm động ................................................................................ 34
Hng kí t và hng xâu kí t ........................................................................................ 35
Hng logic ............................................................................................................................ 36
Định nghĩa một hng #define ..................................................................................... 36
Khai báo hng const ........................................................................................................ 37
CHƯƠNG 4. TOÁN T ....................................................................................... 38
Toán t gán ......................................................................................................................... 38
Toán t thc hin phép toán s hc ........................................................................ 39
Toán t gán hp nht ..................................................................................................... 40
Toán t tăng v{ giảm ...................................................................................................... 40
Toán t so sánh ................................................................................................................. 41
Toán t logic ...................................................................................................................... 42
Toán t điu kin ............................................................................................................. 43
Toán t phân tách ............................................................................................................ 45
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 3
C++
Toán t dch bit ................................................................................................................. 45
Toán t chuyển đổi kiu d liu ................................................................................ 48
Các toán t khác ............................................................................................................... 49
Th t ưu tiên của các toán t ................................................................................... 49
CHƯƠNG 5. XUT NHẬP CƠ BẢN .................................................................. 52
Xut d liu chun cout ................................................................................................. 52
Nhp d liu chun cin .................................................................................................. 53
Nhp d liu nh lp stringstream .......................................................................... 55
CHƯƠNG 6. CÁC CẤU TRÚC LỆNH ĐIỀU KHIN ............................................ 58
Cu trúc lệnh có điều kin: if và else ........................................................................ 58
Cu trúc lp ......................................................................................................................... 60
Cu trúc la chn: switch ............................................................................................. 67
CHƯƠNG 7. HÀM ................................................................................................. 72
Khai báos dng hàm .............................................................................................. 73
Phm vi tác dng ca biến ............................................................................................ 77
Hàm không tr v giá tr - Hàm void. ....................................................................... 78
Tham biến và tham tr .................................................................................................... 79
Giá tr mặc định ca tham s hình thc .................................................................. 82
Chng cht hàm ................................................................................................................ 83
Hàm ni tuyến ................................................................................................................... 84
H{m đệ quy ......................................................................................................................... 85
CHƯƠNG 8. CÁC KIỂU D LIU CÓ CU TRÚC .............................................. 88
Mng ...................................................................................................................................... 88
Xâu kí t ............................................................................................................................... 91
CHƯƠNG 9. CON TR ........................................................................................ 93
Toán t tham chiếu & ..................................................................................................... 93
Toán t tham chiếu ngược * ........................................................................................ 94
Khai báo biến con tr...................................................................................................... 96
Con tr, mng và xâu kí t ............................................................................................ 98
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 4
C++
Các phép toán s hc trên con tr .......................................................................... 100
Con tr tr vào con tr ................................................................................................ 102
Con tr void ..................................................................................................................... 104
Con tr null ...................................................................................................................... 105
Con tr hàm ..................................................................................................................... 105
CHƯƠNG 10. B NH ĐỘNG .......................................................................... 107
Toán t new và new[] ................................................................................................. 107
Toán t delete và delete[] ......................................................................................... 109
CHƯƠNG 11. KIU D LIU STRUCT VÀ CON TR STRUCT ................. 110
Struct .................................................................................................................................. 110
Con tr struct .................................................................................................................. 114
Struct lng nhau ............................................................................................................ 115
Kích thước b nh ca struct ................................................................................... 115
CHƯƠNG 12. CÁC KIU D LIU KHÁC ...................................................... 117
Kiu d liu t đnh nghĩa ......................................................................................... 117
Kiu d liệu union thường ........................................................................................ 117
Kiu d liu union n danh ....................................................................................... 118
Kiu d liu enum ......................................................................................................... 118
CHƯƠNG 13. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ........................................ 120
Lch s hình thành ........................................................................................................ 120
Lp v{ đối tượng ........................................................................................................... 126
Hàm to và hàm hy .................................................................................................... 130
Chng cht hàm to ...................................................................................................... 132
Sao chép hàm to .......................................................................................................... 133
Tính đóng gói – Encapsulation ................................................................................ 139
Con tr đối tượng .......................................................................................................... 140
Lớp được khai báo nh t khóa struct và union ............................................. 141
Con tr this ...................................................................................................................... 141
Th{nh viên tĩnh – T khóa static ............................................................................ 143
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 5
C++
Hàm bn và lp bn ..................................................................................................... 144
Chng cht toán t ....................................................................................................... 147
Tính kế tha - Inheritance......................................................................................... 153
Các mc truy cp ........................................................................................................... 156
Tính đa kế tha Multiple Inheritance ............................................................... 159
Tính đa hình – Polymorphism ................................................................................. 160
Tính trừu tượng hóa - Abstraction ........................................................................ 172
Hàm mu Template Function ............................................................................... 173
Lp mu Template class ......................................................................................... 173
CHƯƠNG 14. NAMESPACE ............................................................................... 178
T khóa namespace ..................................................................................................... 178
T khóa using ................................................................................................................. 179
Phm vi ca namespace ............................................................................................. 180
T|i đnh danh cho namespace ................................................................................. 181
Namespace std ............................................................................................................... 181
CHƯƠNG 15. NGOI L .................................................................................... 182
Mệnh đề try…catch ....................................................................................................... 182
Mệnh đề throw ............................................................................................................... 182
Thư viện chun exception ......................................................................................... 183
CHƯƠNG 16. LÀM VIỆC VI FILE ................................................................... 186
M file ................................................................................................................................ 186
Đóng file ............................................................................................................................ 188
File văn bn ...................................................................................................................... 188
Kim tra trng thái ca các c hiu ....................................................................... 189
Con tr get và put .......................................................................................................... 190
File nh phân .................................................................................................................... 192
B đệm v{ Đồng b hóa .............................................................................................. 193
CHƯƠNG 17. CÁC LỚP THƯ VIỆN ................................................................. 194
1. Lp s phc complex .............................................................................................. 194
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 6
C++
2. Lớp ngăn xếp stack .................................................................................................. 196
3. Lớp h{ng đợi queue ................................................................................................. 197
3. Lp vector ................................................................................................................... 198
4. Lp string .................................................................................................................... 200
5. Lp list .......................................................................................................................... 203
6. Lp map ....................................................................................................................... 203
7. Lp set .......................................................................................................................... 204
8. Các lớp thư viện nhp xut ................................................................................... 204
NG DN THC HÀNH ............................................................................... 212
BÀI THC HÀNH S 1 ................................................................................................. 212
BÀI THC HÀNH S 2 ................................................................................................. 213
BÀI THC HÀNH S 3 ................................................................................................. 214
BÀI THC HÀNH S 4 ................................................................................................. 215
BÀI THC HÀNH S 5 ................................................................................................. 215
BÀI THC HÀNH S 6 ................................................................................................. 216
BÀI TP NÂNG CAO ............................................................................................ 218
BÀI TP LN ....................................................................................................... 225
DANH SÁCH HÌNH ............................................................................................... 228
TRA CU T KHÓA ............................................................................................ 229
TÀI LIU THAM KHO ....................................................................................... 230
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 7
C++
GII THIU
1. Cu trúc ca giáo trình
Gi|o trình được chia ra làm 17 chương mi chương đưc chia làm
các mc khác nhau. C|c chương được sp xếp theo trình t t lp trình
ng th tục trên C++ đến lập trình hướng đối tượng các lớp thư
viện bản. Độc gi th truy cp vào mc bt t phn ph lc nm
đầu sách. Nhiu mc bao gm các d để t cách s dng. Tôi
khuyên các bạn nên đọc c d này th hiu mỗi đoạn
chương trình trước khi đọc chương tiếp theo.
Mt cách thc tốt để tăng lượng kiến thc nhận được đó l{ h~y chỉnh
sa, b sung lnh mi da trên d mẫu, theo hướng duy ca
ca bn thân, để t đó th hiu mt c|ch đầy đủ v ni dung ta
tiếp thu được.
Sau khi đc xong giáo trình, tôi còn cung cp mt s bài tp thc hành
đ ngh đ đc gi nên th nghim. Hãy gii nhng i tp này, chúng s
rt hu ích giúp các bạn cũng cố li kiến thc môn hc cũng như hiu
sâu sắc hơn phần lý thuyết.
Một điều na độc gi cn lưu ý: h~y đọc trang cui cùng ca cun
s|ch, để nắm được mt s thut ng anh-việt tương ứng đưc s dng
trong giáo trình này. Tôi cũng gắng s dng tên gi phù hp nht vi
đại đa số các giáo trình hin hành. Tuy nhiên, độc gi cũng nên nắm các
thut ng tiếng anh tương ứng, để th tham kho thêm các tài liu
chuyên môn tiếng anh.
Khi viết giáo trình y, tôi không th tránh khi sai t. Rt mong s
đóng góp ý kiến quý báu ca các bn đc gi cũng như c|c bn đng
nghip. Mi s đóng góp xin liên hệ theo địa ch email:
dnhthanh@hueic.edu.vn. Hi vng vi các ý kiến đóng góp của các bn,
giáo trình này s ngày càng hoàn thiện hơn.
2. Mt vài chú ý v s tương thích của C và C++
Chun ANSI-C++ được mt t chc tiêu chun quc tế thng nhất đưa
ra. được chính thc ra mắt v{o th|ng 11 năm 1997 v{ duyt li vào
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 8
C++
năm 2003. Tuy nhiên, ngôn ngữ C++ đ~ tồn tại trước đó một thi gian
kh| d{i (v{o năm 1980). Trước đó, có rất nhiu trình dch không h tr
c|c tính năng mới bao gm c chun ANSI-C++. Giáo trình này đưc xây
dựng trên c|c chương trình dịch hiện đại h tr đầy đủ chun ANSI-C++.
Tôi đảm bo rng các d s hoạt động tt nếu độc gi s dng mt
trình dch h tr ANSI-C++. Có nhiu s chn la, có th là min phí hoc
các phn mềm thương mại. Trong giáo trình y, i gii thiệu đến các
các bn hai công c biên dch C++ GCC MinGW min phí Visual
C++ - thương mại.
3. Trình biên dch
Các d trong cuốn gi|o trình n{y được xây dng ch yếu trên chế
độ console (m{n hình DOS). Điu đó nghĩa l{ s dng chế độ văn
bản để hin th các kết qu. Mi trình dịch C++ đu h tr chế độ dch
console. Vi mt môi trường phát trin tích hp IDE cho C++ min phí,
chúng ta có th s dụng chương trình Codeblocks hoc Eclipse. Chúng
các môi trường phát trin tích hp h tr son tho biên dch C++.
Chúng h tr i trưng GCC đ biên dch c C C++. Vi CodeBlocks,
chúng ta th ti phn mm ti địa ch
http://www.codeblocks.org/downloads. Đối vi Eclipse, mt trình
son tho biên dch ngôn ng lp trình chuyên nghiệp nhưng ho{n
toàn min p(vì ta th cu hình kết hp vi các công c biên dch
kh|c nhau để tạo ra môi trường phát trin tích hp cho các ngôn ng lp
trình khác nhau). Chúng ta th dùng đ son tho biên dch
Java, PHP, JSP, Python… v{ hiển nhiên c C/C++. Đ}y l{ một d án
ngun m, tiêu tn hàng triệu đôla ca IBM. Để ti v bn mi nht cho
đến thời điểm n{y (năm 2010) l{ Eclipse Helios, ta th truy cập đến
địa ch bên dưới
1
. Đối vi Eclipse, chúng ta nên s dng kết hp vi
trình biên dch C++ là MinGW, cũng l{ mt d án m. Chúng ta có th
ti v tại địa ch bên dưới
2
. Vi Eclipse, tcông vic cấu hình ban đầu
tương đối phc tp. Nhưng nó l{ một trình son tho tuyt vi. Ta có th
s dụng để son tho nhiu ngôn ng lp trình bằng c|ch c{i đặt
thêm plugin h tr. Nhiu nhà phát triển đ~ sử dng Eclipse làm nn ti
1
http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/helios/R/eclipse-cpp-helios-
win32.zip
2
http://nchc.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-
inst/mingw-get-inst-20100831/mingw-get-inst-20100831.exe
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 9
C++
cho vic phát trin các ng dng ca mình: Embarcadero s dụng để
phát trin JBuider, Adobe s dụng để phát trin Flash Buider rt
nhiu các hãng phn mm ni tiếng khác.
Nếu mt lp trình viên Java, Eclipse mt s la chn không th
b qua. Nếu phát trin Flash theo d án mã ngun m t Adobe, Eclipse
cũng l{ sự la chn hoàn ho. Nếu phát trin C/C++, vi các trình son
thảo thì Eclipse cũng l{ sự la chn không ti. Vic s dng thành tho
Eclipse s mt li thế cho chúng ta khi tiến hành nghiên cu Java, lp
trình Web, Flex, Python… sau này.
Bên cạnh đó, chúng tôi cũng giới thiu môi trường phát trin tích hp
IDE Microsoft Visual Studio. Đ}y l{ trình biên dịch thương mại
trình biên dch chuyên nghip ni tiếng nht trên h điu hành
Windows. Ta có th s dng để phát trin c ng dng trên nn NET
hoc các ng dng Win32. Nếu mun phát trin các ng dng theo
ng ca Microsoft, ta nên s dng Visual Studio. Phiên bn mi nht
đến thời điểm này VS 2010. Nhưng cn lưu ý rằng, khi nghiên cu
Visual C++, hãy chn la phiên bn nh cho Win32 không phi là
ng dng CLI (common language infrastructure) bởi được phát trin
trên nn NET. Visual C++ for NET mt s khác bit so vi Visual
C++ for Win32.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 10
C++
MÔI TRƯỜNG PHÁT TRIN TÍCH HP IDE
1. CodeBlocks
Trưc tiên, chúng ta s tìm hiu cách to d án, biên dch mt tp tin C++
trên CodeBlocks. Độc gi cũng cần lưu ý rằng, CodeBlocks t chc công vic
theo các d án. Chúng ta th biên dch tng tp tin cpp một c|ch đơn lẻ.
Tuy nhiên, làm vic theo d án s giúp ích cho chúng ta rt nhiu khi làm
vic vi nhng tác v ln.
Đầu tiên chúng ta khởi động codeblocks, sau đó v{o File > New > Project.
Trong hp thoi hin ra, chúng ta chn console application (Hình 1).
nhấp Go, sau đó nhấp Next. Trong hp thoi tiếp theo, ta chn C++
nhp Next.
Hình 1 To mi d án trong CodeBlocks
Hp thoi yêu cầu điền thông tin v d án s xut hin. H~y điền tên d án,
v trí lưu trữ d |n. Sau đó nhấp Next. Cui cùng nhp Finish.
Trong ca s qun d án, ta nhấp đôi chut vào tp main.cpp. Ni dung
son tho s đưc nhp vào trong tp tin này.
Nếu ta mun b sung các tp tin khác hoc các lớp đối tượng, ta th b
sung chúng t menu File > New.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 11
C++
Biên dch chương trình:
+ Nhp vào Build > Build and Run.
+ Hoc nhp phím F9.
T động định dng mã. Khi viết một chương trình C++ hay bt mt
chương trình trên một ngôn ng lp trình nào
khác, ta cn tuân th quy phạm định dng
ngun. nhiu chun mực cho c|c định dng
ngun: chun Hungary, chun lạc đ{...
rng, chúng không ảnh hưởng đến vic biên dch
chương trình, nhưng chúng giúp người đọc
th d hiểu chương trình của chúng ta hơn. Nếu
ta không nm vng các quy phm này thì th
s dng chức năng định dng mã ngun t động
ca CodeBlocks. Hãy kích chut phi vào vùng son thảo, sau đó chn
Format this file (Astyle).
T đng khi to phn tn c phương thc ca lp. Đ h tr cho
vic son thảo, CodeBlocks ng h tr chức năng khi to nhanh
nguồn. Để khi to nhanh phần khai b|o th}n phương thức ca lp t khai
báo prototype của nó, chúng ta đặt tr chut vào sau khai báo lp (tc v trí
s chèn khai b|o th}n phương thức), sau đó, kích chuột phi, chn Insert >
All class methods without implementation.
Trong hp thoi hin ra, hãy chn
những phương thức mun khi to
phần th}n tương ứng, sau đó, nhấp
Ok.
Hình 2 Khi tạo th}n phương thức
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 12
C++
2. Eclipse Helios
Sau khi ti xong Eclipe Helios v máy, hãy tiến hành gii nén tp tin.
Chương trình Eclipse không yêu cu chúng ta phải c{i đặt, nhưng thể
làm vic nếu trên máy tính đ~ c{i một máy o Java. Để ti v máy o Java,
chúng ta th truy cp vào trang ch ca Sun (nay Oracle) ti địa ch
sau đ}y
3
.
Để xây dng mt chương trình C/C++ trên Eclipse, chúng ta cn:
- Eclipse Helios for C/C++ (nếu phiên bn ti v dành cho Java, ta cn
phải c{i đặt thêm plugin h tr); hoc th s dng mt n bản hơn
của Eclipse như Galileo, Europa….
- Công c biên dch GCC MingW.
- Máy o Java JVM.
Các bước cu hình trên Eclipse Helios
c 1. C{i đt máy o Java.
c 2. Cài MinGW.
c 3. Gii nén Eclipse Helios, sau đó khởi động (nhp vào tp tin
eclipse.exe). Thông thường, Eclipse s t động cu hình MinGW giúp ta. Nếu
không, hãy thc hin c 4.
c 4. Vào menu Project > Properties. Trong hp thoi xut hin, hãy
chn C/C++ Build > Settings.
Hình 3 Cu hình MinGW trong Eclipse Helios
Trong th Tool Settings, ta chn GCC Assembler > General. Sau đó, nhp vào
biểu tượng có du cng mu xanh. Hp thoi sau s hin ra:
3
http://javadl.sun.com/webapps/download/AutoDL?BundleId=41723
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 13
C++
Hình 4 Chọn đường dẫn đến thư mục bin ca MinGW
Ta tiến hành hãy nhập tên đường dẫn đến thư mục bin ca MinGW (hoc
nhấp v{o nút File system đ duyệt đến thư mục này). Mặc định khi c{i đt,
thư mục này s là C:\MinGW\bin. Sau đó nhp Ok. Vy là công vic cu hình
đ~ ho{n tất.
Xây dng d án đầu tiên trên Eclipse
Cũng giống như CodeBlocks, Eclipse cũng t chức chương trình theo dự án.
Để to mi mt d án trong Eclipse, chúng ta có ba cách:
- Vào File > New > C++ Project.
- Vào biu tưng to mi d án trên thanhng c, chn C++ Project.
- Kích chut phi vào ca s Project Explorer > chn New > C++ Project.
Tiếp đến, hp thoại sau đ}y sẽ xut hin.
Trong hp thoi này, nếu chn mt
d án kh thi (executable), hãy chn
executable. Ta cũng thể chọn thư
viện dll (static library)… Tương ng
vi d án kh thi, chúng ta th
chn Empty Project hoc Hello
World C++ Project. Đối vi Empty
Project, s to mt d án trng.
Ngược li vi Hello World C++
Project, ta s nhận được mt file cpp
cha ni dung chúng ta s tho
luận trong chương tiếp theo.
Sau đó, hãy nhp vào tên d án
nhp Next (nếu chưa cấu hình
MinGW), hoc nhp Finish (nếu đ~ hoàn tt vic cu hình).
Hình 5 - To mi d án
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 14
C++
To mi mt file ni dung trong Eclipse. Một chương trình trong C++
thưng chia làm hai loi tp: .cpp .h. Tệp .cpp thường cha ni dung
chương trình, tệp .h thường cha các khai báo.
Lời khuyên trước khi to mi các file: hãy to một thư mục chung để
cha toàn b ni dung sau này, tôi tm gọi thư mục n{y l{ thư mục src.
Trong thư mục src, hãy tạo hai thư mc, một thư mục cpps một thư mc
headers. Thư mục cpps s cha toàn b tệp .cpp, thư mục headers s cha
toàn b tp .h. Tp Main.cpp cha hàm main s được đặt trong thư mục src.
Nghĩa l{ ta scấu trúc tương tự như sau:
Hin nhiên ta hoàn toàn không nht thiết
phi thc hiện theo như cấu trúc thư mục
n{y. Tuy nhiên điều này s làm cho d án
ca ta tr nên sáng sủa hơn rất nhiu.
Chúng ta có th b sung thêm c|c thư mục
ph kh|c, nhưng n tu}n thủ cu trúc cây
này (ví d khi cn phân bit các tp tin cpp
thành nhiu loi kh|c nhau, thì trong thư
mc cpps, hãy tạo thêm c|c thư mc con
kh|c…)
Biên dch mt d án
Để biên dch mt d án, hãy nhp vào biu ợng sau đ}y trên thay công c
ca Eclipse.
Hình 7 - Biên dch mt d án
Chn Run As > Local C/C++ Application.
Mt s th thut giúp son tho nhanh
src
cpps
headers
Main.cpp
Hình 6 - Cấu trúc thư mục ca mt d án
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 15
C++
Eclipse chứa đựng mt tp các tin ích giúp chúng ta son thảo nhanh hơn,
ít phát sinh lỗi hơn. Sau đ}y, tôi xin gii thiu mt vài nh năng giúp c
chúng ta son thảo nhanh hơn.
To mi mt lp
Vào New > Class. Hp thoại sau đ}y sẽ hin ra
Hình 8 - Hp thoi to mi class
Trong hp thoi này, cần lưu ý: source folder thư mục cha tp tin s to
mi (thường s đưc phân tách thành tp .h .cpp), namespace phm vi
tác dng của nó trong namespace được ch định, class name tên ca lp s
to mi, base class tên ca lp cha mà s tha kế (bm vào nút add để
chn các lp tn ti), constructor destructor cho phép khi to hàm
to và hàm hy. Chúng ta s tìm hiu nhng khái nim này khi làm quen vi
lp trình hưng đi tưng.
Tạo nhanh các phương thức Getter và Setter
Nếu khi khai báo mt lp, cùng vi các thuc tính ca nó, thay s dng
hàm tạo để thiết lp giá tr ban đầu, ta th dùng hàm setter; hoặc để tiếp
nhn giá tr t các thuc tính, ta có th dùng các hàm getter. Tôi s gii
thiu chi tiết hơn về c|c phương thức này trong phn lp trình ớng đối
ng. Trong phn này, tôi s ng dn cách to chúng bng thao tác nhp
chut. Vào menu Source, chn Generate Getters and Setter. Trong hp thoi
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 16
C++
hin ra, hãy chn các thuc tính cn tạo phương thức getter setter, sau
đó nhấp Ok.
Mt s phím tt khác
Phím tt
Công dng
Ctrl+Space
Bt chế độ gi nhc lnh.
main Ctrl+Space
Khi to nhanh hàm main.
Ctrl+Shift+F
Định dng nhanh mã ngun.
Ctrl+/
Comment vùng m~ đ~ được bôi đen, nếu
vùng bôi đen đ~ chế độ comment, thì du
comment s b hy b.
Tab
Dch toàn b ni dung b bôi đen sang phi
mt tab.
Shift+Tab
Dch toàn b ni dung b bôi đen sang tr|i
mt tab.
Ctrl+1
Chnh sa nhanh toàn b các t ging vi
t đang được bôi đen. Sau khi chnh sa
xong, nhấp Enter để kết thúc.
Ctrl+Shift+/
To mt khi comment cho vùng văn bn
đ~ b bôi đen.
Ctrl+Shift+\
Hy b vùng văn bản b comment bi khi
comment.
Trên đ}y, tôi đ~ giới thiu qua hai chương trình son tho miễn phí để
lp trình C/C++: CodeBlocks Eclipse. Vi CodeBlocks, ch cn ti cài
đặt. Môi trường h tr biên dịch GCC đ~ đưc tích hp sn. Vi Eclipse, ta
phi thc hin cu hình để kết hp vi trình biên dch GCC. Nếu l{ người
nhiu tri nghim v máy tính, thì nên chn Eclipse bởi l{ chương trình
son tho rt chuyên nghip. Nếu l{ người mi tiếp xúc máy tính, hãy chn
CodeBlock vì c{i đặt đơn giản.
3. Visual Studio 2010 dành cho Visual C++
Visual Studio 2010 một môi trường biên dch tích hp ca Microsoft.
trình biên dch tt nht, hiện đại nht trên h điu hành Windows. Chúng
ta th s dụng để biên dch C++, C#, Visual Basic, J#... Ta s tìm hiu
Visual Studio theo hướng tiếp cn vi C++. Một điều cần lưu ý, vi phiên
bn 2010 này, Visual Studio có hai phiên bn dành cho C++: C++ for Net
C++ for Win32. Chúng ta ch tìm hiu v tính năng C++ for Win32. Trong nội
dung ca giáo trình này, ta s xây dng các ng dng Console trên nn
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 17
C++
Win32 không tho lun thêm v Visual C++ for Net bi thuc mt
phạm trù tương đối khác so vi Visual C++ for Win32.
Khởi động Visual Studio 2010.
Để khởi động VS 2010, ta có th thc hin mt trong hai cách sau:
Nhấp đối chut vào biểu tượng VS 2010 trên nn Desktop.
Vào Start > All Programs > Microsoft Visual Studio 2010, chn biu
ng VS 2010.
Hình 9 - Giao din tng th ca Visual Studio 2010
To mi d án trong VS 2010.
ng như Eclipse, VS cũng qun lý theo các workspace các d án. Trong
VS, workspace đưc gi Solution. Trong mi workspace có th cha
nhiu d án. Nếu chưa to mt d án nào, thì khi to mi mt d án,
workspace s t động được tạo. Để to mi mt d án, ta vào File > New
Project (hoc t hp phím tt Ctrl+Shift+N).
Trong hp thoi xut hin, chúng ta chn Win32 Console Application.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 18
C++
Hình 10 - To d án Win32 Console
Mc name: hãy nhp tên d
án mà cn to.
Mc Location: nhp vào nút
Browse để chn v trí lưu
tr. Mặc đnh, Visual Studio
s lưu trữ d án thư mục
Documents.
Mc Solution name: to mt
thư mc con trong thư mc
d án, hay to trc tiếp
trong thư mục d án.
Hp thoi Hình 12 s hin ra.
Nhóm Application Type
+ Windows application: to ng dng winform.
+ Console application: to ng dng chy trên DOS.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
T r a n g | 19
C++
+ Dll: tạo thư viện dll.
+ Static library: tạo thư viện tĩnh.
Nhóm Add common header file
+ Alt: to header t lớp thư viện Alt.
+ MFC: to header t lớp thư viện MFC.
Nhóm Additional options
+ Empty project: to d án rng không có tp tin.
+ Export symbols: xut bn các biểu tượng.
+ Precompiled header: to tập tin tiêu đề tin biên dch.
Hãy chn Console Application và chn Empty Project. Sau đó, nhấp Finish.
To các tp tin trong d án.
Trong ca s Solution Explorer, hãy kích chut phi và chn Add:
- Nếu tập tin đ~ tồn ti, hãy chọn Add Existing Items. Sau đó, chúng ta duyt
đến v trí tn ti tp tin.
- Nếu tập tin chưa tồn ti, hãy chn Add New Items. Trong ca s xut hin,
tùy thuc vào tp tin chúng ta cn, hãy chn loại tương ng. Thông
thưng, trong d án ca C++, chúng ta s dng hai tập tin l{ tiêu đ .h và
th}n chương trình .cpp. Sau đó, h~y nhập tên ca tp tin và nhp Ok. Tp tin
tiêu đề .h thường cha các khai báo prototype ca hàm hoc lp. Ngi ra,
th cha các hàm macro, các khai báo hng biến toàn cc được s
dng trong toàn b chương trình. Tập tin .cpp thường cha phn thân ca
các hàm hoc lp. Khi làm vic vi các d án trong C++, chúng ta n tách
chương trình th{nh nhiu phn n s dng các tp tiêu đ đ làm cho
chương trình gn gàng và d hiểu hơn.
Sau khi chọn được tp tin cn to, hãy nhp tên ca tập tin, sau đó nhp nút
Add. Tp tin mi s đưc b sung vào d án.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
| 1/231

Preview text:

CuuDuongThanCong.com
https://fb.com/tailieudientucntt
ĐẶNG NGỌC HOÀNG THÀNH C++ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Tài liệu học tập Trang | 1 CuuDuongThanCong.com
https://fb.com/tailieudientucntt PHỤ LỤC
GIỚI THIỆU .............................................................................................................7
MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP IDE ................................................... 10
CHƯƠNG 1. CƠ BẢN VỀ C++ ............................................................................ 23
CHƯƠNG 2. BIẾN VÀ CÁC KIỂU DỮ LIỆU ..................................................... 26
Từ khóa ................................................................................................................................ 26
Kiểu dữ liệu nguyên thủy .............................................................................................. 27
Khai báo biến ..................................................................................................................... 28
Phạm vi tác dụng của biến ............................................................................................ 29
Khởi tạo giá trị cho biến ................................................................................................ 30
Khởi tạo giá trị cho biến tĩnh static .......................................................................... 31
Giới thiệu về xâu kí tự .................................................................................................... 32
CHƯƠNG 3. HẰNG .............................................................................................. 34
Hằng số nguyên ................................................................................................................. 34
Hằng số thực có dấu chấm động ................................................................................ 34
Hằng kí tự và hằng xâu kí tự ........................................................................................ 35
Hằng logic ............................................................................................................................ 36
Định nghĩa một hằng #define ..................................................................................... 36
Khai báo hằng const ........................................................................................................ 37
CHƯƠNG 4. TOÁN TỬ ....................................................................................... 38
Toán tử gán ......................................................................................................................... 38
Toán tử thực hiện phép toán số học ........................................................................ 39
Toán tử gán hợp nhất ..................................................................................................... 40
Toán tử tăng v{ giảm ...................................................................................................... 40
Toán tử so sánh ................................................................................................................. 41
Toán tử logic ...................................................................................................................... 42 +
Toán tử điều kiện ............................................................................................................. 43 +
Toán tử phân tách ............................................................................................................ 45 C T r a n g | 2 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Toán tử dịch bit ................................................................................................................. 45
Toán tử chuyển đổi kiểu dữ liệu ................................................................................ 48
Các toán tử khác ............................................................................................................... 49
Thứ tự ưu tiên của các toán tử ................................................................................... 49
CHƯƠNG 5. XUẤT NHẬP CƠ BẢN .................................................................. 52
Xuất dữ liệu chuẩn cout ................................................................................................. 52
Nhập dữ liệu chuẩn cin .................................................................................................. 53
Nhập dữ liệu nhờ lớp stringstream .......................................................................... 55
CHƯƠNG 6. CÁC CẤU TRÚC LỆNH ĐIỀU KHIỂN ............................................ 58
Cấu trúc lệnh có điều kiện: if và else ........................................................................ 58
Cấu trúc lặp ......................................................................................................................... 60
Cấu trúc lựa chọn: switch ............................................................................................. 67
CHƯƠNG 7. HÀM ................................................................................................. 72
Khai báo và sử dụng hàm .............................................................................................. 73
Phạm vi tác dụng của biến ............................................................................................ 77
Hàm không trả về giá trị - Hàm void. ....................................................................... 78
Tham biến và tham trị .................................................................................................... 79
Giá trị mặc định của tham số hình thức .................................................................. 82
Chồng chất hàm ................................................................................................................ 83
Hàm nội tuyến ................................................................................................................... 84
H{m đệ quy ......................................................................................................................... 85
CHƯƠNG 8. CÁC KIỂU DỮ LIỆU CÓ CẤU TRÚC .............................................. 88
Mảng ...................................................................................................................................... 88
Xâu kí tự ............................................................................................................................... 91
CHƯƠNG 9. CON TRỎ ........................................................................................ 93
Toán tử tham chiếu & ..................................................................................................... 93
Toán tử tham chiếu ngược * ........................................................................................ 94
Khai báo biến con trỏ...................................................................................................... 96 + +
Con trỏ, mảng và xâu kí tự ............................................................................................ 98 C T r a n g | 3 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các phép toán số học trên con trỏ .......................................................................... 100
Con trỏ trỏ vào con trỏ ................................................................................................ 102
Con trỏ void ..................................................................................................................... 104
Con trỏ null ...................................................................................................................... 105
Con trỏ hàm ..................................................................................................................... 105
CHƯƠNG 10. BỘ NHỚ ĐỘNG .......................................................................... 107
Toán tử new và new[] ................................................................................................. 107
Toán tử delete và delete[] ......................................................................................... 109
CHƯƠNG 11. KIỂU DỮ LIỆU STRUCT VÀ CON TRỎ STRUCT ................. 110
Struct .................................................................................................................................. 110
Con trỏ struct .................................................................................................................. 114
Struct lồng nhau ............................................................................................................ 115
Kích thước bộ nhớ của struct ................................................................................... 115
CHƯƠNG 12. CÁC KIỂU DỮ LIỆU KHÁC ...................................................... 117
Kiểu dữ liệu tự định nghĩa ......................................................................................... 117
Kiểu dữ liệu union thường ........................................................................................ 117
Kiểu dữ liệu union ẩn danh ....................................................................................... 118
Kiểu dữ liệu enum ......................................................................................................... 118
CHƯƠNG 13. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ........................................ 120
Lịch sử hình thành ........................................................................................................ 120
Lớp v{ đối tượng ........................................................................................................... 126
Hàm tạo và hàm hủy .................................................................................................... 130
Chồng chất hàm tạo ...................................................................................................... 132
Sao chép hàm tạo .......................................................................................................... 133
Tính đóng gói – Encapsulation ................................................................................ 139
Con trỏ đối tượng .......................................................................................................... 140
Lớp được khai báo nhờ từ khóa struct và union ............................................. 141
Con trỏ this ...................................................................................................................... 141 + +
Th{nh viên tĩnh – Từ khóa static ............................................................................ 143 C T r a n g | 4 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Hàm bạn và lớp bạn ..................................................................................................... 144
Chồng chất toán tử ....................................................................................................... 147
Tính kế thừa - Inheritance......................................................................................... 153
Các mức truy cập ........................................................................................................... 156
Tính đa kế thừa – Multiple Inheritance ............................................................... 159
Tính đa hình – Polymorphism ................................................................................. 160
Tính trừu tượng hóa - Abstraction ........................................................................ 172
Hàm mẫu – Template Function ............................................................................... 173
Lớp mẫu – Template class ......................................................................................... 173
CHƯƠNG 14. NAMESPACE ............................................................................... 178
Từ khóa namespace ..................................................................................................... 178
Từ khóa using ................................................................................................................. 179
Phạm vi của namespace ............................................................................................. 180
T|i định danh cho namespace ................................................................................. 181
Namespace std ............................................................................................................... 181
CHƯƠNG 15. NGOẠI LỆ .................................................................................... 182
Mệnh đề try…catch ....................................................................................................... 182
Mệnh đề throw ............................................................................................................... 182
Thư viện chuẩn exception ......................................................................................... 183
CHƯƠNG 16. LÀM VIỆC VỚI FILE ................................................................... 186
Mở file ................................................................................................................................ 186
Đóng file ............................................................................................................................ 188
File văn bản ...................................................................................................................... 188
Kiểm tra trạng thái của các cờ hiệu ....................................................................... 189
Con trỏ get và put .......................................................................................................... 190
File nhị phân .................................................................................................................... 192
Bộ đệm v{ Đồng bộ hóa .............................................................................................. 193
CHƯƠNG 17. CÁC LỚP THƯ VIỆN ................................................................. 194 + +
1. Lớp số phức complex .............................................................................................. 194 C T r a n g | 5 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2. Lớp ngăn xếp stack .................................................................................................. 196
3. Lớp h{ng đợi queue ................................................................................................. 197
3. Lớp vector ................................................................................................................... 198
4. Lớp string .................................................................................................................... 200
5. Lớp list .......................................................................................................................... 203
6. Lớp map ....................................................................................................................... 203
7. Lớp set .......................................................................................................................... 204
8. Các lớp thư viện nhập xuất ................................................................................... 204
HƯỚNG DẪN THỰC HÀNH ............................................................................... 212
BÀI THỰC HÀNH SỐ 1 ................................................................................................. 212
BÀI THỰC HÀNH SỐ 2 ................................................................................................. 213
BÀI THỰC HÀNH SỐ 3 ................................................................................................. 214
BÀI THỰC HÀNH SỐ 4 ................................................................................................. 215
BÀI THỰC HÀNH SỐ 5 ................................................................................................. 215
BÀI THỰC HÀNH SỐ 6 ................................................................................................. 216
BÀI TẬP NÂNG CAO ............................................................................................ 218
BÀI TẬP LỚN ....................................................................................................... 225
DANH SÁCH HÌNH ............................................................................................... 228
TRA CỨU TỪ KHÓA ............................................................................................ 229
TÀI LIỆU THAM KHẢO ....................................................................................... 230 + + C T r a n g | 6 CuuDuongThanCong.com
https://fb.com/tailieudientucntt GIỚI THIỆU
1. Cấu trúc của giáo trình
Gi|o trình được chia ra làm 17 chương và mỗi chương được chia làm
các mục khác nhau. C|c chương được sắp xếp theo trình tự từ lập trình
hướng thủ tục trên C++ đến lập trình hướng đối tượng và các lớp thư
viện cơ bản. Độc giả có thể truy cập vào mục bất kì từ phần phụ lục nằm
đầu sách. Nhiều mục bao gồm các ví dụ để mô tả cách sử dụng. Tôi
khuyên các bạn nên đọc các ví dụ này và có thể hiểu mỗi đoạn mã
chương trình trước khi đọc chương tiếp theo.
Một cách thức tốt để tăng lượng kiến thức nhận được đó l{ h~y chỉnh
sửa, bổ sung mã lệnh mới dựa trên ví dụ mẫu, theo hướng tư duy của
của bản thân, để từ đó có thể hiểu một c|ch đầy đủ về nội dung mà ta tiếp thu được.
Sau khi đọc xong giáo trình, tôi còn cung cấp một số bài tập thực hành
đề nghị để độc giả nên thử nghiệm. Hãy giải những bài tập này, chúng sẽ
rất hữu ích và giúp các bạn cũng cố lại kiến thức môn học cũng như hiểu
sâu sắc hơn phần lý thuyết.
Một điều nữa mà độc giả cần lưu ý: h~y đọc trang cuối cùng của cuốn
s|ch, để nắm được một số thuật ngữ anh-việt tương ứng được sử dụng
trong giáo trình này. Tôi cũng có gắng sử dụng tên gọi phù hợp nhất với
đại đa số các giáo trình hiện hành. Tuy nhiên, độc giả cũng nên nắm các
thuật ngữ tiếng anh tương ứng, để có thể tham khảo thêm các tài liệu chuyên môn tiếng anh.
Khi viết giáo trình này, tôi không thể tránh khỏi sai sót. Rất mong sự
đóng góp ý kiến quý báu của các bạn độc giả cũng như c|c bạn đồng
nghiệp. Mọi sự đóng góp xin liên hệ theo địa chỉ email:
dnhthanh@hueic.edu.vn. Hi vọng với các ý kiến đóng góp của các bạn,
giáo trình này sẽ ngày càng hoàn thiện hơn.
2. Một vài chú ý về sự tương thích của C và C++ +
Chuẩn ANSI-C++ được một tổ chức tiêu chuẩn quốc tế thống nhất đưa +
ra. Nó được chính thức ra mắt v{o th|ng 11 năm 1997 v{ duyệt lại vào C T r a n g | 7 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
năm 2003. Tuy nhiên, ngôn ngữ C++ đ~ tồn tại trước đó một thời gian
kh| d{i (v{o năm 1980). Trước đó, có rất nhiều trình dịch không hỗ trợ
c|c tính năng mới bao gồm cả chuẩn ANSI-C++. Giáo trình này được xây
dựng trên c|c chương trình dịch hiện đại hỗ trợ đầy đủ chuẩn ANSI-C++.
Tôi đảm bảo rằng các ví dụ sẽ hoạt động tốt nếu độc giả sử dụng một
trình dịch hỗ trợ ANSI-C++. Có nhiều sự chọn lựa, có thể là miễn phí hoặc
các phần mềm thương mại. Trong giáo trình này, tôi giới thiệu đến các
các bạn hai công cụ biên dịch C++ là GCC MinGW – miễn phí và Visual C++ - thương mại. 3. Trình biên dịch
Các ví dụ trong cuốn gi|o trình n{y được xây dựng chủ yếu trên chế
độ console (m{n hình DOS). Điều đó có nghĩa l{ nó sử dụng chế độ văn
bản để hiển thị các kết quả. Mọi trình dịch C++ đều hỗ trợ chế độ dịch
console. Với một môi trường phát triển tích hợp IDE cho C++ miễn phí,
chúng ta có thể sử dụng chương trình Codeblocks hoặc Eclipse. Chúng là
các môi trường phát triển tích hợp hỗ trợ soạn thảo và biên dịch C++.
Chúng hỗ trợ môi trường GCC để biên dịch cả C và C++. Với CodeBlocks, chúng ta có thể tải phần mềm tại địa chỉ
http://www.codeblocks.org/downloads. Đối với Eclipse, nó là một trình
soạn thảo và biên dịch ngôn ngữ lập trình chuyên nghiệp nhưng ho{n
toàn miễn phí (vì ta có thể cấu hình kết hợp với các công cụ biên dịch
kh|c nhau để tạo ra môi trường phát triển tích hợp cho các ngôn ngữ lập
trình khác nhau). Chúng ta có thể dùng nó để soạn thảo và biên dịch
Java, PHP, JSP, Python… v{ hiển nhiên là cả C/C++. Đ}y l{ một dự án mã
nguồn mở, tiêu tốn hàng triệu đôla của IBM. Để tải về bản mới nhất cho
đến thời điểm n{y (năm 2010) l{ Eclipse Helios, ta có thể truy cập đến
địa chỉ bên dưới1. Đối với Eclipse, chúng ta nên sử dụng kết hợp với
trình biên dịch C++ là MinGW, nó cũng l{ một dự án mở. Chúng ta có thể
tải về tại địa chỉ bên dưới2. Với Eclipse, thì công việc cấu hình ban đầu
tương đối phức tạp. Nhưng nó l{ một trình soạn thảo tuyệt vời. Ta có thể
sử dụng nó để soạn thảo nhiều ngôn ngữ lập trình bằng c|ch c{i đặt
thêm plugin hỗ trợ. Nhiều nhà phát triển đ~ sử dụng Eclipse làm nền tải
1 http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/helios/R/eclipse-cpp-helios- + win32.zip +
2 http://nchc.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-
inst/mingw-get-inst-20100831/mingw-get-inst-20100831.exe C T r a n g | 8 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
cho việc phát triển các ứng dụng của mình: Embarcadero sử dụng nó để
phát triển JBuider, Adobe sử dụng nó để phát triển Flash Buider và rất
nhiều các hãng phần mềm nổi tiếng khác.
Nếu là một lập trình viên Java, Eclipse là một sự lựa chọn không thể
bỏ qua. Nếu phát triển Flash theo dự án mã nguồn mở từ Adobe, Eclipse
cũng l{ sự lựa chọn hoàn hảo. Nếu phát triển C/C++, với các trình soạn
thảo thì Eclipse cũng l{ sự lựa chọn không tồi. Việc sử dụng thành thạo
Eclipse sẽ là một lợi thế cho chúng ta khi tiến hành nghiên cứu Java, lập
trình Web, Flex, Python… sau này.
Bên cạnh đó, chúng tôi cũng giới thiệu môi trường phát triển tích hợp
IDE Microsoft Visual Studio. Đ}y l{ trình biên dịch thương mại và là
trình biên dịch chuyên nghiệp và nổi tiếng nhất trên hệ điều hành
Windows. Ta có thể sử dụng để phát triển các ứng dụng trên nền NET
hoặc các ứng dụng Win32. Nếu muốn phát triển các ứng dụng theo
hướng của Microsoft, ta nên sử dụng Visual Studio. Phiên bản mới nhất
đến thời điểm này là VS 2010. Nhưng cần lưu ý rằng, khi nghiên cứu
Visual C++, hãy chọn lựa phiên bản dành cho Win32 mà không phải là
ứng dụng CLI (common language infrastructure) bởi nó được phát triển
trên nền NET. Và Visual C++ for NET có một số khác biệt so với Visual C++ for Win32. + + C T r a n g | 9 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP IDE 1. CodeBlocks
Trước tiên, chúng ta sẽ tìm hiểu cách tạo dự án, biên dịch một tập tin C++
trên CodeBlocks. Độc giả cũng cần lưu ý rằng, CodeBlocks tổ chức công việc
theo các dự án. Chúng ta có thể biên dịch từng tập tin cpp một c|ch đơn lẻ.
Tuy nhiên, làm việc theo dự án sẽ giúp ích cho chúng ta rất nhiều khi làm
việc với những tác vụ lớn.
Đầu tiên chúng ta khởi động codeblocks, sau đó v{o File > New > Project.
Trong hộp thoại hiện ra, chúng ta chọn console application (Hình 1).
Và nhấp Go, sau đó nhấp Next. Trong hộp thoại tiếp theo, ta chọn C++ và nhấp Next.
Hình 1 – Tạo mới dự án trong CodeBlocks
Hộp thoại yêu cầu điền thông tin về dự án sẽ xuất hiện. H~y điền tên dự án,
vị trí lưu trữ dự |n. Sau đó nhấp Next. Cuối cùng nhấp Finish.
Trong cửa sổ quản lý dự án, ta nhấp đôi chuột vào tệp main.cpp. Nội dung
soạn thảo sẽ được nhập vào trong tập tin này. +
Nếu ta muốn bổ sung các tập tin khác hoặc các lớp đối tượng, ta có thể bổ
sung chúng từ menu File > New. + C T r a n g | 10 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Biên dịch chương trình:
+ Nhấp vào Build > Build and Run.
+ Hoặc nhấp phím F9.
Tự động định dạng mã. Khi viết một chương trình C++ hay bất kì một
chương trình trên một ngôn ngữ lập trình nào
khác, ta cần tuân thủ quy phạm định dạng mã
nguồn. Có nhiều chuẩn mực cho c|c định dạng
mã nguồn: chuẩn Hungary, chuẩn lạc đ{... Dù
rằng, chúng không ảnh hưởng đến việc biên dịch
chương trình, nhưng chúng giúp người đọc có
thể dễ hiểu chương trình của chúng ta hơn. Nếu
ta không nắm vững các quy phạm này thì có thể
sử dụng chức năng định dạng mã nguồn tự động
của CodeBlocks. Hãy kích chuột phải vào vùng soạn thảo, sau đó chọn
Format this file (Astyle).
Tự động khởi tạo phần thân các phương thức của lớp. Để hỗ trợ cho
việc soạn thảo, CodeBlocks cũng hỗ trợ chức năng khởi tạo nhanh mã
nguồn. Để khởi tạo nhanh phần khai b|o th}n phương thức của lớp từ khai
báo prototype của nó, chúng ta đặt trỏ chuột vào sau khai báo lớp (tức vị trí
sẽ chèn khai b|o th}n phương thức), sau đó, kích chuột phải, chọn Insert >
All class methods without implementation.
Trong hộp thoại hiện ra, hãy chọn
những phương thức muốn khởi tạo
phần th}n tương ứng, sau đó, nhấp Ok. + + C
Hình 2 – Khởi tạo th}n phương thức T r a n g | 11 CuuDuongThanCong.com
https://fb.com/tailieudientucntt 2. Eclipse Helios
Sau khi tải xong Eclipe Helios về máy, hãy tiến hành giải nén tập tin.
Chương trình Eclipse không yêu cầu chúng ta phải c{i đặt, nhưng nó có thể
làm việc nếu trên máy tính đ~ c{i một máy ảo Java. Để tải về máy ảo Java,
chúng ta có thể truy cập vào trang chủ của Sun (nay là Oracle) tại địa chỉ sau đ}y3.
Để xây dựng một chương trình C/C++ trên Eclipse, chúng ta cần:
- Eclipse Helios for C/C++ (nếu phiên bản tải về là dành cho Java, ta cần
phải c{i đặt thêm plugin hỗ trợ); hoặc có thể sử dụng một ấn bản cũ hơn
của Eclipse như Galileo, Europa….
- Công cụ biên dịch GCC – MingW. - Máy ảo Java JVM.
Các bước cấu hình trên Eclipse Helios
Bước 1. C{i đặt máy ảo Java.
Bước 2. Cài MinGW.
Bước 3. Giải nén Eclipse Helios, sau đó khởi động nó (nhấp vào tập tin
eclipse.exe). Thông thường, Eclipse sẽ tự động cấu hình MinGW giúp ta. Nếu
không, hãy thực hiện bước 4.
Bước 4. Vào menu Project > Properties. Trong hộp thoại xuất hiện, hãy
chọn C/C++ Build > Settings.
Hình 3 – Cấu hình MinGW trong Eclipse Helios
Trong thẻ Tool Settings, ta chọn GCC Assembler > General. Sau đó, nhấp vào
biểu tượng có dấu cộng mầu xanh. Hộp thoại sau sẽ hiện ra: + +
3 http://javadl.sun.com/webapps/download/AutoDL?BundleId=41723 C T r a n g | 12 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Hình 4 – Chọn đường dẫn đến thư mục bin của MinGW
Ta tiến hành hãy nhập tên đường dẫn đến thư mục bin của MinGW (hoặc
nhấp v{o nút File system để duyệt đến thư mục này). Mặc định khi c{i đặt,
thư mục này sẽ là C:\MinGW\bin. Sau đó nhấp Ok. Vậy là công việc cấu hình đ~ ho{n tất.
Xây dựng dự án đầu tiên trên Eclipse
Cũng giống như CodeBlocks, Eclipse cũng tổ chức chương trình theo dự án.
Để tạo mới một dự án trong Eclipse, chúng ta có ba cách:
- Vào File > New > C++ Project.
- Vào biểu tượng tạo mới dự án trên thanh công cụ, chọn C++ Project.
- Kích chuột phải vào cửa sổ Project Explorer > chọn New > C++ Project.
Tiếp đến, hộp thoại sau đ}y sẽ xuất hiện.
Trong hộp thoại này, nếu chọn một
dự án khả thi (executable), hãy chọn
executable. Ta cũng có thể chọn thư
viện dll (static library)… Tương ứng
với dự án khả thi, chúng ta có thể
chọn Empty Project hoặc Hello
World C++ Project. Đối với Empty
Project, nó sẽ tạo một dự án trống.
Ngược lại với Hello World C++
Project, ta sẽ nhận được một file cpp
chứa nội dung mà chúng ta sẽ thảo
luận trong chương tiếp theo.
Sau đó, hãy nhập vào tên dự án và
Hình 5 - Tạo mới dự án +
nhấp Next (nếu chưa cấu hình +
MinGW), hoặc nhấp Finish (nếu đ~ hoàn tất việc cấu hình). C T r a n g | 13 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Tạo mới một file nội dung trong Eclipse. Một chương trình trong C++
thường chia làm hai loại tệp: .cpp và .h. Tệp .cpp thường chứa nội dung
chương trình, tệp .h thường chứa các khai báo.
Lời khuyên trước khi tạo mới các file: hãy tạo một thư mục chung để
chứa toàn bộ nội dung sau này, tôi tạm gọi thư mục n{y l{ thư mục src.
Trong thư mục src, hãy tạo hai thư mục, một thư mục cpps và một thư mục
headers. Thư mục cpps sẽ chứa toàn bộ tệp .cpp, thư mục headers sẽ chứa
toàn bộ tệp .h. Tệp Main.cpp chứa hàm main sẽ được đặt trong thư mục src.
Nghĩa l{ ta sẽ có cấu trúc tương tự như sau:
Hiển nhiên ta hoàn toàn không nhất thiết src
phải thực hiện theo như cấu trúc thư mục
n{y. Tuy nhiên điều này sẽ làm cho dự án
của ta trở nên sáng sủa hơn rất nhiều. cpps
Chúng ta có thể bổ sung thêm c|c thư mục
phụ kh|c, nhưng nên tu}n thủ cấu trúc cây
này (ví dụ khi cần phân biệt các tập tin cpp headers
thành nhiều loại kh|c nhau, thì trong thư
mục cpps, hãy tạo thêm c|c thư mục con Main.cpp kh|c…)
Hình 6 - Cấu trúc thư mục của một dự án
Biên dịch một dự án
Để biên dịch một dự án, hãy nhấp vào biểu tượng sau đ}y trên thay công cụ của Eclipse.
Hình 7 - Biên dịch một dự án
Chọn Run As > Local C/C++ Application. +
Một số thủ thuật giúp soạn thảo nhanh + C T r a n g | 14 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Eclipse chứa đựng một tập các tiện ích giúp chúng ta soạn thảo nhanh hơn,
ít phát sinh lỗi hơn. Sau đ}y, tôi xin giới thiệu một vài tính năng giúp các
chúng ta soạn thảo nhanh hơn.
Tạo mới một lớp
Vào New > Class. Hộp thoại sau đ}y sẽ hiện ra
Hình 8 - Hộp thoại tạo mới class
Trong hộp thoại này, cần lưu ý: source folder – thư mục chứa tập tin sẽ tạo
mới (thường sẽ được phân tách thành tệp .h và .cpp), namespace – phạm vi
tác dụng của nó trong namespace được chỉ định, class name – tên của lớp sẽ
tạo mới, base class – tên của lớp cha mà nó sẽ thừa kế (bấm vào nút add để
chọn các lớp tồn tại), constructor và destructor – cho phép khởi tạo hàm
tạo và hàm hủy. Chúng ta sẽ tìm hiểu những khái niệm này khi làm quen với
lập trình hướng đối tượng.
Tạo nhanh các phương thức Getter và Setter
Nếu khi khai báo một lớp, cùng với các thuộc tính của nó, thay vì sử dụng
hàm tạo để thiết lập giá trị ban đầu, ta có thể dùng hàm setter; hoặc để tiếp
nhận giá trị từ các thuộc tính, ta có thể dùng các hàm getter. Tôi sẽ giới
thiệu chi tiết hơn về c|c phương thức này trong phần lập trình hướng đối +
tượng. Trong phần này, tôi sẽ hướng dẫn cách tạo chúng bằng thao tác nhấp +
chuột. Vào menu Source, chọn Generate Getters and Setter. Trong hộp thoại C T r a n g | 15 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
hiện ra, hãy chọn các thuộc tính cần tạo phương thức getter và setter, sau đó nhấp Ok.
Một số phím tắt khác Phím tắt Công dụng Ctrl+Space
Bật chế độ gợi nhắc lệnh. main – Ctrl+Space Khởi tạo nhanh hàm main. Ctrl+Shift+F
Định dạng nhanh mã nguồn. Ctrl+/
Comment vùng m~ đ~ được bôi đen, nếu
vùng bôi đen đ~ ở chế độ comment, thì dấu comment sẽ bị hủy bỏ. Tab
Dịch toàn bộ nội dung bị bôi đen sang phải một tab. Shift+Tab
Dịch toàn bộ nội dung bị bôi đen sang tr|i một tab. Ctrl+1
Chỉnh sửa nhanh toàn bộ các từ giống với
từ đang được bôi đen. Sau khi chỉnh sửa
xong, nhấp Enter để kết thúc. Ctrl+Shift+/
Tạo một khối comment cho vùng văn bản đ~ bị bôi đen. Ctrl+Shift+\
Hủy bỏ vùng văn bản bị comment bởi khối comment.
Trên đ}y, tôi đ~ giới thiệu sơ qua hai chương trình soạn thảo miễn phí để
lập trình C/C++: CodeBlocks và Eclipse. Với CodeBlocks, chỉ cần tải và cài
đặt. Môi trường hỗ trợ biên dịch GCC đ~ được tích hợp sẵn. Với Eclipse, ta
phải thực hiện cấu hình để kết hợp với trình biên dịch GCC. Nếu l{ người có
nhiều trải nghiệm về máy tính, thì nên chọn Eclipse bởi nó l{ chương trình
soạn thảo rất chuyên nghiệp. Nếu l{ người mới tiếp xúc máy tính, hãy chọn
CodeBlock vì c{i đặt đơn giản.
3. Visual Studio 2010 dành cho Visual C++
Visual Studio 2010 là một môi trường biên dịch tích hợp của Microsoft. Nó
là trình biên dịch tốt nhất, hiện đại nhất trên hệ điều hành Windows. Chúng
ta có thể sử dụng nó để biên dịch C++, C#, Visual Basic, J#... Ta sẽ tìm hiểu
Visual Studio theo hướng tiếp cận với C++. Một điều cần lưu ý, với phiên
bản 2010 này, Visual Studio có hai phiên bản dành cho C++: C++ for Net và +
C++ for Win32. Chúng ta chỉ tìm hiểu về tính năng C++ for Win32. Trong nội +
dung của giáo trình này, ta sẽ xây dựng các ứng dụng Console trên nền C T r a n g | 16 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Win32 mà không thảo luận thêm về Visual C++ for Net bởi vì nó thuộc một
phạm trù tương đối khác so với Visual C++ for Win32.
Khởi động Visual Studio 2010.
Để khởi động VS 2010, ta có thể thực hiện một trong hai cách sau:
 Nhấp đối chuột vào biểu tượng VS 2010 trên nền Desktop.
 Vào Start > All Programs > Microsoft Visual Studio 2010, chọn biểu tượng VS 2010.
Hình 9 - Giao diện tổng thể của Visual Studio 2010
Tạo mới dự án trong VS 2010.
Cũng như Eclipse, VS cũng quản lý theo các workspace và các dự án. Trong
VS, workspace được gọi là Solution. Trong mỗi workspace có thể chứa
nhiều dự án. Nếu chưa tạo một dự án nào, thì khi tạo mới một dự án,
workspace sẽ tự động được tạo. Để tạo mới một dự án, ta vào File > New
Project (hoặc tổ hợp phím tắt Ctrl+Shift+N).
Trong hộp thoại xuất hiện, chúng ta chọn Win32 Console Application. + + C T r a n g | 17 CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Hình 10 - Tạo dự án Win32 Console
Mục name: hãy nhập tên dự án mà cần tạo.
Mục Location: nhấp vào nút
Browse để chọn vị trí lưu
trữ. Mặc định, Visual Studio
sẽ lưu trữ dự án ở thư mục Documents.
Mục Solution name: tạo một
thư mục con trong thư mục
dự án, hay tạo trực tiếp trong thư mục dự án.
Hộp thoại Hình 12 sẽ hiện ra.
Hình 11 - Win32 Application Wizard Nhóm Application Type
+ Windows application: tạo ứng dụng winform. + +
+ Console application: tạo ứng dụng chạy trên DOS. C T r a n g | 18 CuuDuongThanCong.com
https://fb.com/tailieudientucntt + Dll: tạo thư viện dll.
+ Static library: tạo thư viện tĩnh.
Nhóm Add common header file
+ Alt: tạo header từ lớp thư viện Alt.
+ MFC: tạo header từ lớp thư viện MFC.
Nhóm Additional options
+ Empty project: tạo dự án rỗng không có tập tin.
+ Export symbols: xuất bản các biểu tượng.
+ Precompiled header: tạo tập tin tiêu đề tiền biên dịch.
Hãy chọn Console Application và chọn Empty Project. Sau đó, nhấp Finish.
Tạo các tập tin trong dự án.
Trong cửa sổ Solution Explorer, hãy kích chuột phải và chọn Add:
- Nếu tập tin đ~ tồn tại, hãy chọn Add Existing Items. Sau đó, chúng ta duyệt
đến vị trí tồn tại tập tin.
- Nếu tập tin chưa tồn tại, hãy chọn Add New Items. Trong cửa sổ xuất hiện,
tùy thuộc vào tập tin mà chúng ta cần, hãy chọn loại tương ứng. Thông
thường, trong dự án của C++, chúng ta sử dụng hai tập tin l{ tiêu đề .h và
th}n chương trình .cpp. Sau đó, h~y nhập tên của tập tin và nhấp Ok. Tệp tin
tiêu đề .h thường chứa các khai báo prototype của hàm hoặc lớp. Ngoài ra,
nó có thể chứa các hàm macro, các khai báo hằng và biến toàn cục được sử
dụng trong toàn bộ chương trình. Tập tin .cpp thường chứa phần thân của
các hàm hoặc lớp. Khi làm việc với các dự án trong C++, chúng ta nên tách
chương trình th{nh nhiều phần và nên sử dụng các tệp tiêu đề để làm cho
chương trình gọn gàng và dễ hiểu hơn.
Sau khi chọn được tập tin cần tạo, hãy nhập tên của tập tin, sau đó nhấp nút
Add. Tập tin mới sẽ được bổ sung vào dự án. + + C T r a n g | 19 CuuDuongThanCong.com
https://fb.com/tailieudientucntt