DANH SÁCH HÌNH ..... Vào menu Source, ch n Generate Getters and Setters... Cũng nh Eclipse VS cũng qu n lý theo các workspace và các d án... Hình 11 - Win Application Wizard... Tên hàm l
Trang 2Đ NG NG C HOÀNG THÀNH
Tài li u h c t p C++
Theo dõi b n c p nh t trên blog c a tôi
Trang 3
T r a n g | 2
PH L C
GI I THI U .7
MÔI TR NG PHÁT TRI N TÍCH H P IDE 10
CH NG C B N V C++ 23
CH NG 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 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 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
Trang 4
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 XU T NH P C B N
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 CÁC C U TRÚC L NH ĐI U KHI N
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 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 CÁC KI U D LI U CÓ C U TRÚC 88
M ng 88
Xâu kí t 91
CH NG CON TR
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
Trang 5
T r a n g | 4
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 B NH Đ NG 107
Toán t new và new 107
Toán t delete và delete 109
CH NG 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 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 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
Hàm t o sao chép 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
Trang 6
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 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 NGO I L 182
M nh đ try…catch 182
M nh đ throw 182
Th vi n chu n exception 183
CH NG 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 CÁC L P TH VI N
1 L p s ph c complex 194
Trang 7
T r a n g | 6
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
DANH SÁCH HÌNH 228
TRA C U T KHÓA
TÀI LI U THAM KH O 230
Trang 8Sau 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
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 năm và duy t l i vào
Trang 9năm 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 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 bên d i1 Đ 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 là Eclipse Helios, ta có th truy
c p đ n đ a ch bên d i2 Đ 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 i3 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 ng cho vi c phát tri n các ng d ng c a mình: Embarcadero s d ng
1 http www codeblocks org downloads
2 http ftp jaist ac jp pub eclipse technology epp downloads release helios R
eclipse-cpp-helios-win zip
3 http nchc dl sourceforge net project mingw Automated MinGW Installer
mingw-get-inst mingw-get-mingw-get-inst- mingw-get-inst-20100831.exe
Trang 10N 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
Trang 11Tr 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
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
Trang 12mã ngu n: chu n Hungary, chu n l c đà Dù
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
Hình 2 – Kh i t o thân ph ng th c
Trang 13Sau 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 đây4
Đ 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
Trang 14Ta 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à
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
Hình 5 - T o m i d án
Trang 15T 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
T ch c t p tin. 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
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
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 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 khác
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
src cpps
headers
Main.cpp Hình 6 - C u trúc th m c c a m t d án
Trang 16
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 Setters Trong h p
Trang 17main – 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
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 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 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 Win 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
Trang 18
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 Win
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 ch n bi u
t ng VS 2010
Hình 9 - Giao di n t ng th c a Visual Studio
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 Win Console Application
Trang 19Windows application t o ng d ng winform
Console application t o ng d ng ch y trên DOS
Hình 11 - Win Application Wizard
Trang 20Nhó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
Trang 21Hình 12 - B sung thêm m t t p tin
- Add Class b sung các l p đ i t ng cho d án đây chúng ta ch n C++
class
Hình 13 - B sung thêm l p đ i t ng
Nh p Add C a s sau đây s xu t hi n
Trang 22- Class name: tên c a l p
- h file: tên c a tiêu đ l p cũng là tên c a t p tin tiêu đ
- cpp file: tên c a t p tin cpp t ng ng v i l p
- Base class n u l p m i t o ra th a k t m t l p khác, hãy nh p tên c a
l p c s vào đây
- Access m c th a k c a l p đang t o t l p c s
- Virtual destructor t o m t ph ng th c h y o
- Inline: t o m t ph ng th c inline Tuy chúng ta có th s d ng t khóa
này nh ng c ch làm vi c c a Visual C là t đ ng b sung inline khi
biên d ch n u ph ng th c đ c cho là phù h p đ s d ng inline Đi u đó
có nghĩa là chúng ta không c n dùng đ n t khóa này
Biên d ch d án
- Đ biên d ch và th c thi m t d án, chúng ta nh p vào Debug Start
Debugging ho c Start without Debugging
- Đ biên d ch toàn b d án mà không th c thi d án, chúng ta vào Build,
ch n Build Solution
M t s phím t t trong Visual Studio 2010
Trang 23Visual Studio không h tr các tính năng m nh m cho vi c kh i t o
nhanh mã ngu n Nh ng ta có th s d ng ti n ích Visual Assist Phiên b n
cho đ n th i đi m này năm là
Xem bi u đ l p
Đ quan sát bi u đ l p trong VS 2010, ta nh p chu t ph i vào tên d án
(trong c a s Solution Explorer ch n Show class diagram Sau đó chúng
ta kéo th các l p đ i t ng vào vùng bi u đ
Hình 15 - Xem bi u đ l p
Trang 24trình đ u tiên N u chúng ta đã t ng làm quen v i m t ngôn ng l p trình
nào đó thì ch c h n ai cũng bi t đ n ví d kinh đi n c a m t ngôn ng l p
trình đó là ch ng trình Hello world
my first program include iostream using namespace std int main
{ cout<< Hello world return 0;
Dòng này b t đ u b ng kí t #include Ti p đ n là tên t p tin tiêu đ
(ch a các th vi n Th vi n iostream đ c đ t trong d u <> Nó ch a
các hàm xu t nh p c b n Hàm này là m t ph n c a namespace std
Trong C++, các thành ph n c a th vi n chu n đ c khai báo trong
namespace đây là namespace std Đ có th truy xu t đ n các thành
ph n c a nó, chúng ta mô t nó b ng t khóa using Trong th vi n
chu n c a C++, đ i t ng cout đ c t ch c trong namespace std
B t kì m t ch ng trình C nào cũng ph i có m t hàm main đ th c
thi ch ng trình M t hàm s đ c khai báo theo c u trúc trên
T khóa int mô t ki u d li u mà hàm tr v là integer Chúng ta c n
l u ý r ng trong ch ng trình C thì ta có th tùy ý khai báo là void ho c
int nh ng trong C thì b t bu c ph i khai báo là int V y int hay void
Trang 25trong tr ng h p này có th c s quan tr ng Chúng ta nên luôn khai
báo hàm main có ki u d li u tr v là ki u int S dĩ nh v y là vì khi
hàm main tr v ki u int thì theo quy c, n u ch ng trình có l i nó s
tr v m t mã int khác và ng c l i, n u ch ng trình không có l i, nó
s tr v mã int 0 L i đây là l i ch ng trình liên quan đ n quá trình
biên d ch, ch không ph i là l i liên quan đ n cú pháp Chúng ta s nh n
th y mã mà nó tr v trong dòng thông báo cu i cùng khi biên d ch:
process returned 0 (0x0)
Tên hàm là main Ti p theo là c p d u ngo c đ n dùng đ ch a tham s
đính kèm Thông th ng m t ch ng trình ng d ng s ch a hai tham
s trong hàm main là int argc và char* args[] Các tham s này g i là tham s dòng l nh Ti p theo là d u {} Bên trong c p d u này là ch ng
trình chính
D u m kh i
Đ i t ng cout đ c là C-out là chu n dùng đ xu t d li u ra màn
hình Chúng ta c n l u ý hàm printf v n ho t đ ng t t trong tr ng h p
này N u dùng hàm printf thì ta không c n khai báo th vi n iostream và
namespace std trên Khi s d ng đ i t ng cout, chúng ta cũng có th
b qua dòng l nh và thay vào đó ta s vi t std cout Khi s d ng đ i
t ng cout, chúng ta có thêm m t cách th c đ xu ng dòng thay vì dùng
\n đó là endl Đ i t ng cout th ng đi v i toán t xu t << Chúng ta có
th s dùng nhi u toán t này khi mu n xu t nhi u ph n t riêng bi t:
cout string string endl
Câu l nh return dùng đ tr v giá tr c a hàm main N u hàm có tr
v giá tr , thì c n return m t giá tr nào đó cùng ki u d li u tr v v i
hàm N u hàm là void, thì không c n return
quy đ nh ph m vi c a m t kh i l nh scope M t cách th c giúp chúng
ta chuyên nghi p h n khi l p trình là sau d u m , ta nên s d ng ti p
Trang 26đ ng Sau đó hãy nh p n i dung c n thi t vào bên trong c p d u này
Đi u đó s tránh kh i s nh m l n khi ch ng trình có quá nhi u d u
đóng m
Đ nh n bi t đ c ph m vi nh h ng c a các kh i l nh – hãy s d ng
phím tab đ t o ra s l i lõm khi vi t mã ch ng trình Nh trong ví d
trên, đ i t ng cout và hàm return s nh y vào m t tab so v i d u kh i
l nh t ng ng Đ ng bao gi ti t ki m s d ng phím tab và phím enter N u s d ng h p lí ch ng trình s r t sáng s a và d đ c
Bài t p 1
1 Hãy vi t ch ng trình in ra dòng ch Chao ban ban co khoe khong
2 Hãy vi t ch ng trình in ra hai dòng ch trên hai dòng phân bi t
Vietnam và Hoa ky
3 Hãy vi t ch ng trình in ra tam giác đ u v i các đ nh là các d u *
*
* *
Trang 27m t vài chi ti t Chúng ta có m t vài dòng l nh, biên d ch chúng và sau đó
ch y ch ng trình đ thu k t qu Dĩ nhiên ta có th làm nhanh h n tuy
nhiên vi c l p trình không ch đ n thu n là in ra các dòng thông báo đ n
gi n lên màn hình Đ đi xa h n chúng ta s vi t m t ch ng trình th c thi
m t tác v h u ích là giúp chúng ta tìm hi u v khái ni m bi n
Gi s có hai giá tr 5 và 2 Ta c n l u hai giá tr này vào b nh Bây
gi , n u tôi mu n c ng thêm vào s th nh t và l u l i giá tr này cho nó,
ti p theo tôi mu n l y hi u c a s th nh t sau khi thay đ i v i s th hai
Ti n trình x lý công vi c trên có th đ c vi t trên C nh sau
s đ c quy đ nh b i m t ki u d li u nào đó Trong tr ng h p ví d
c a chúng ta, bi n có ki u d li u là int Ki u d li u th ng có hai lo i:
ki u d li u nguyên th y primitive data type và ki u d li u tham chi u
reference data type Chúng ta s th o lu n chi ti t v chúng trong ph n
ti p theo Nh ng ta có th hi u r ng, m t ki u d li u đ n gi n và có c u
trúc trong C là ki u d li u nguyên th y Đ i v i ki u d li u tham chi u, tôi
s gi i thi u trong ph n l p trình h ng đ i t ng trong C++
Trang 28Ch ng Bi n và Các ki u d li u
B ng t khóa chu n trong C++
asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern,
false, float, for, friend, goto, if, inline, int ,long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try,
typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while
B ng t khóa b sung trong C++
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
Ki u d li u nguyên th y
Khi l p trình chúng ta l u các bi n trong b nh máy tính nh ng
máy tính c n ph i bi t lo i d li u mà chúng ta mu n l u Đi u này giúp
b o đ m đ s l ng ô nh c n thi t đ l u d li u
Trong máy tính, b nh đ c t ch c theo các byte M t byte là m t
đ n v đo l ng t i thi u mà chúng ta có th qu n lý trong C++ M t byte có
th l u m t bi n char Thêm vào đó máy tính cũng qu n lý nh ng ki u d
li u ph c t p h n B ng sau đây li t kê các ki u d li u và kích th c t ng
ng
char Kí t ho c s nguyên bé 1 byte signed -128 ->127
unsigned -> 255 short S nguyên ng n 2 byte signed -215 -> 215-1
unsigned -> 216-1 int S nguyên 4 byte signed -231 -> 231-1
unsigned -> 232-1 long S nguyên dài 4 byte signed -231 -> 231-1
unsigned -> 232-1 long long S nguyên c c dài 8 byte signed -263 -> 263-1
unsigned -> 264-1 bool Giá tr logic – true false 1 byte true và false
double S th p phân ch m đ ng 8 byte s th p phân
long S th p phân ch m đ ng 8 byte s th p phân
Trang 29thu c vào h th ng và ch ng trình d ch t ng ng Giá tr đ c đ a ra
đây là trên h th ng Windows 32 bit và trình d ch GCC MinGW Nh ng đ i
v i h th ng khác, các giá tr này có th thay đ i (ví d ki u int và long trên
Windows bit và bit là byte nh ng trên Linux bit là byte và trên
Linux 64 bit là 8 byte
Khai báo bi n
Nh ví d trên, ta th y r ng, mu n s d ng m t bi n trong C++, ta
c n khai báo bi n v i ki u d li u mà ta mong mu n C u trúc khai báo
Tên ki u d li u> <Tên bi n>;
Ví d
int a; //Khai báo bi n a ki u nguyên
float mynumber; //Khai báo bi n mynumber ki u float
bool istrue; //Khai báo bi n istrue ki u bool
long num1, num2, num3; //Khai báo ba bi n num1, num2, num3 cùng ki u
long
Chú ý
N u khi khai báo bi n thu c các ki u nguyên mà ta không s d ng khai báo
có d u signed ho c không d u unsigned thì ch ng trình d ch m c đ nh
s quy đ nh là ki u nguyên có d u
int mynum;
t ng đ ng signed int mynum
Đ i v i ki u char thì có ngo i l Chúng ta nên khai báo t ng minh là signed char ho c unsigned char
Đ i v i signed int và unsigned int có th vi t đ n gi n là signed ho c
unsigned
Trang 30khai báo trong m t kh i l nh nào, thì nó ch có tác d ng trong kh i l nh đó
Bi n đ c khai báo theo ki u này g i là bi n c c b (ho c bi n đ a ph ng
N u m t bi n đ c khai báo ngoài t t c các kh i l nh (k c hàm main thì
bi n đó có tác d ng trong toàn b ch ng trình và g i là bi n toàn c c
float n;
{//Kh i l nh 2
Trang 31Các bi n toàn c c có th đ c s d ng trong toàn b ch ng trình nó
có th đ c g i trong các hàm, trong hàm chính main Còn bi n c c b đ c
khai báo trong kh i l nh nào, thì nó ch có th đ c s d ng trong kh i l nh
đó
Trong m t s tình hu ng, bi n có th đ c khai báo trong d u ngo c
đ n tình hu ng này th ng g p khi nghiên c u các l nh có c u trúc thì
Trang 32Ch ng Bi n và Các ki u d li u
type tên_bi n (giá_tr _kh i_t o int a
Bây gi , ta có th vi t l i đo n ch ng trình tính toán giá tr c a các
bi n trên, b ng cách s d ng giá tr kh i t o m c đ nh này
int a (5);
int b (2);
a = a + 1; // a=6 int result (a – b); //result = 4 cout<<result<<endl;
2 Hãy ch n m t cách kh i t o tùy ý, đ vi t ch ng trình tính giá tr c a
bi u th c delta b b-4*a*c, v i a, b, c l n l t nh n các giá tr 1, 5, 3
Kh i t o giá tr cho bi n tĩnh static
M t bi n đ c khai báo b ng t khóa static thì nó ch kh i t o giá tr đúng
m t l n khi bi n đ c t o ra Thông th ng nh ng bi n này đ c đ t vào
trong m t t p tiêu đ h đ s d ng cho toàn b ch ng trình Ví d sau đây
minh h a cho giá tr c a bi n static s không kh i t o l n th hai trong
vòng l p
Trang 33Gi i thích: bi n x đ c kh i t o trong vòng l p for, n u không có t khóa
static thì trong m i l n l p, bi n này s đ c kh i t o l i và giá tr in ra s
luôn là 3 Tuy nhiên trong tr ng h p này ta s d ng t khóa static do đó
giá tr c a bi n x ch đ c kh i t o m t l n duy nh t Trong nh ng l n l p
ti p theo, giá tr c a x v n đ c l u l i K t qu ta nh n đ c nh trên
Gi i thi u v xâu kí t
M t bi n có th dùng đ l u m t lo i d li u không ph i s , nh ng nó
l i ch a nhi u kí t không nh ki u char mà chúng ta s g i nó là ki u xâu
kí t
Trong th vi n ngôn ng l p trình C++, nó cung c p cho chúng ta ki u
xâu n m trong l p string C n l u ý r ng đ bi u di n m t bi n thu c ki u
xâu, chúng ta có th s d ng khai báo m ng kí t , ho c con tr kí t nh
trong ngôn ng C, ho c s d ng khai báo ki u string Khi s d ng ki u khai
báo tham chi u c a l p string ta c n có khai báo t p tiêu đ là string
Khai báo nguyên th y Khai báo tham chi u
Trang 34return 0;
}
Chúng ta c n l u ý r ng, dù là m t bi n thu c ki u d li u tham chi u
string thì ta v n có th s d ng hai ki u kh i t o nh trên Đi u này ch có
th áp d ng cho ki u string mà thôi Các ki u d li u tham chi u khác
không th s d ng hai cách kh i t o này
Đ bi t thêm thông tin v ki u string các b n nên tham kh o thêm thông
tin v l p string đ c cung c p trong m c 4 c a ch ng 17 trong cùng giáo
trình này
Trang 35ngay khi h ng đ c t o ra Thông th ng ng i ta cũng s d ng các ch
cái đ đ t tên cho h ng Tên h ng không ch a các kí t đ t bi t, kí t tr ng
hay b t đ u b ng s không đ c trùng v i t khóa Trong C++, tên h ng
th ng đ c vi t hoa toàn b H ng th ng đ c chia ra làm: h ng s
nguyên, h ng s th c, h ng kí t , h ng xâu và h ng logic
H ng s nguyên
H ng s nguyên là các h ng có giá tr là s nguyên H ng s nguyên
có th đ c bi u di n d i d ng th p phân, bát phân, ho c th p l c phân
N u h ng s nguyên d i d ng th p phân thì có giá tr nh s th p
phân bình th ng N u là h ng s nguyên bát phân, thì nó b t đ u b ng s 0
(ví d N u là h ng s nguyên th p l c phân, thì nó b t đ u b ng 0x (ví
d x b Các quy t c chuy n đ i s qua l i gi a các h đã đ c nghiên c u
trong h c ph n Nh p môn tin h c
N u h ng s là s nguyên có d u ho c không d u, có th có m t vài
cách khai báo t ng ng
H ng nguyên có d u và không d u
75 //int 75u //unsigned int 75l //long
75ul //unsigned long
Các ti n t và h u t trong hai cách s d ng trên có th vi t th ng ho c
vi t hoa x hay X là nh nhau ho c ul hay UL là nh nhau
H ng s th c có d u ch m đ ng
Chúng ta kh o sát s th c d i d ng s th p phân d u ch m đ ng
ho c d i d ng khoa h c (hay còn g i là d ng lũy th a d ng E – t ng ng
v i lũy th a Ví d 314.159e-2 t ng ng v i 3.14159 hay 6.02e23
t ng ng v i 6.02*1023
Trang 36dòng đ t tab Sau đây là m t vài kí t đ c bi t đó và ý nghĩa c a chúng
M t h ng xâu kí t có th ch a n i dung trên nhi u dòng Khi đó đ
vi t n i dung dòng m i, thì cu i dòng tr c đó ta b sung thêm kí t \
Các xâu kí t có th đ c ghép v i nhau nh vào kí t tr ng
Ví d
Hom nay toi di hoc\
Ngay mai toi o nha
Xâu kí t vi t trên nhi u dòng
Toi yeu lap trinh Xâu kí t ghép
Trang 37Khi s d ng h ng xâu kí t v i ki u d li u là wchar t ta c n thêm
ti n t L bên tr c xâu kí t đó Ví d L Xau ki tu wchar t
Các quy t c trên có th áp d ng cho b t kì h ng xâu kí t thu c ki u
d li u nào char wchar t string ho c m ng kí t t ng ng
H ng logic
H ng logic có hai giá tr là true đúng và false sai M t bi u th c
logic s có ki u d li u là bool Nó ch có th nh n m t trong hai giá tr true
và false Trong C, ta ch có th s d ng ki u s nguyên short int long đ
quy đ nh giá tr c a bi u th c logic: n u giá tr nh n đ c là 0 – t ng ng
v i giá tr sai ng c l i, n u giá tr nh n đ c là khác 0 – t ng ng v i giá
tr đúng Cách quy đ nh này v n còn ho t đ ng t t trên C++ Tuy nhiên, trong C ng i ta đã đ nh nghĩa hai h ng s true và false và ki u d li u
bool H ng s true t ng ng v i giá tr 1 và h ng s false t ng ng v i
giá tr 0 Ta hoàn toàn có th s d ng giá tr true (ho c 1 và false (ho c 0
Đ nh nghĩa m t h ng #define
Khi đ nh nghĩa m t tên g i cho h ng, ta có th s d ng nó th ng
xuyên mà không c n ph i s p x p l i các bi n chi ph i b nh Đ đ nh
nghĩa m t h ng, ta c n s d ng t khóa define
#define tên_h ng giá_tr
#define PI 3.14 define NewLine \n’
Trong ví d trên tôi đã đ nh nghĩa hai h ng PI và Newline Trong
ch ng trình tôi ch c n g i nó đ s d ng, mà không c n tri u g i đ n giá
Trang 38Th c ch t, #define không ph i là m t câu l nh trong C++, nó ch là
m t đ nh h ng ti n x lý directive for the preprocessor Cho nên ta c n
l u ý r ng, k t thúc ph n khai báo này, không có d u ch m ph y
Khai báo h ng const
Đ khai báo m t h ng, ta s d ng t khóa const C u trúc khai báo
nh sau
const ki u_d _li u tên_h ng giá tr ; const int a
const char x \t’;
Trong ví d trên, ta có th th y cách khai báo h ng t ng t nh khai
báo bi n, ch có duy nh t m t đi m khác bi t là ta ph i b sung t khóa
const vào tr c khai báo này H ng và bi n cũng t ng t nhau Chúng ch
khác nhau m t đi m duy nh t là giá tr c a h ng không th thay đ i, còn
bi n thì có th thay đ i
Trang 39toán giá tr c a chúng Các phép toán th c thi trên các bi n ho c h ng g i là
các toán t Và khi đó các bi n ho c h ng đó g i là các toán h ng
Toán t gán
Toán t gán dùng đ gán giá tr cho m t bi n Ví d a
Câu l nh gán s th c hi n gán giá tr bên ph i cho bi n bên trái Ta cũng
có th gán giá tr c a hai bi n cho nhau Ví d a b
Hãy quan sát và suy ng m đo n ch ng trình sau:
Ch ng trình
include iostream using namespace std int main
{ int a, b;
không thay đ i Dòng l nh th c hi n vi c gán giá tr c a bi n b cho
bi n a khi đó b v n không thay đ i; a nh n giá tr c a b, t c là Dòng l nh
Trang 40Chúng ta c n chú ý r ng, toán t gán th c hi n theo nguyên t c ph
i-sang-trái Nghĩa là luôn l y giá tr v ph i đ gán cho v trái Khi đó giá tr
c a bi n v trái thay đ i, còn v ph i không thay đ i Toán t gán có th
th c hi n trong các bi u th c ph c t p h n
a = b + 2; Giá tr c a a b ng giá tr c a b c ng thêm 2
a = a + 1; Tăng giá tr c a a lên 1
/ Phép chia (chia l y ph n nguyên đ i v i hai s nguyên
% Chia l y d ch v i hai s nguyên
Chú ý r ng, phép chia có th th c hi n trên s nguyên ho c s th c
N u th c hi n phép chia trên hai s nguyên thì đây chính là k t qu c a
phép chia l y ph n nguyên Còn n u nó th c hi n trên hai s th c (ho c
m t s th c và m t s nguyên , thì k t qu đ c th c hi n trên phép chia
bình th ng Nh v y, theo m c đ nh hai s nguyên (ho c th c th c hi n
phép toán t ng ng thì nó s tr v k t qu nguyên (ho c th c N u phép
toán th c hi n trên m t s nguyên và m t s th c nó s t đ ng chuy n
đ i v ki u cao h n thành s th c V y làm th nào đ th c hi n phép chia
3 cho 2, n u ta mu n nh n đ c k t qu là 1.5 Ta bi t r ng và là hai s
nguyên, n u ta th c hi n phép chia thì ta thu đ c s nguyên – là k t
qu c a phép chia l y ph n nguyên 3/2, t c là 1 Mu n thu đ c k t qu
1.5, ta c n chuy n đ i 3 và 2 v d ng s th c b ng m t trong các cách sau