Khi vi t giáo trình này, tôi không th tránh kh i sai sót... Cũng nh Eclipse VS cũng qu n lý theo các workspace và các d án... Hãy ch n Console Application và ch n Empty Project Sau đó nh
Trang 2Đ NG NG C (OÀNG T(ÀN(
Tài li u h c t pC++
Trang 3
T r a n g | 2
PH L C
GI I THI U .7
MÔ) TR NG PHÁT TRI N TÍCH H P IDE 10
C( 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
C( 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
C( 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
C( NG 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
C( NG CÁC C U TRÚC L N( Đ) 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
C( 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
({m đ quy 85
C( NG CÁC K) U D LI U CÓ C U TRÚC 88
M ng 88
Xâu kí t 91
C( NG 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
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
C( NG B NH Đ NG 107
Toán t new và new[] 107
Toán t delete và delete[] 109
C( NG K) 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
C( 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
C( NG L P TRÌN( ( NG Đ ) 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
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
C( 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
C( NG NGO I L 182
M nh đ try catch 182
M nh đ throw 182
Th vi n chu n exception 183
C( NG LÀM V) 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
C( NG CÁC L P T( V) N 194
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
( 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
Trang 8đ 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ã
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
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
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 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
Trang 10
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
)DE 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 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
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 đ}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
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
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
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
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 Setter Trong h p tho i
Trang 17main Ctrl+Space Kh i t o nhanh hàm main
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 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 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 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
Trang 19+ Windows application: t o ng d ng winform
+ Console application: t o ng d ng ch y trên DOS
Hình 11 - Win32 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 )tems 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 2010 không h tr c|c tính năng m nh m cho vi c kh i t o
mã ngu n Tuy nhiên, n u chúng ta mong mu n làm vi c đ n gi n và hi u
qu h n thì ta có th s d ng ti n ích b tr M t trong nh ng ti n ích làm
vi c khá hi u qu là Visual Assist Phiên b n cho đ n th i đi m n{y năm
2010) là 10.6
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
[3.] 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
[4.] 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
[5.] D u m kh i
[6.] Đ 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 [3.] 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
[7.] 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{ (oa 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 1 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: 0 -> 255 short S nguyên ng n 2 byte signed: -215 -> 215-1
unsigned: 0 -> 216-1 int S nguyên 4 byte signed: -231 -> 231-1
unsigned: 0 -> 232-1 long S nguyên dài 4 byte signed: -231 -> 231-1
unsigned: 0 -> 232-1 long long S nguyên c c dài 8 byte signed: -263 -> 263-1
unsigned: 0 -> 264-1 bool Giá tr logic true/false 1 byte true và false
double S th p phân ch m đ ng 8 byte 15 s th p phân
long S th p phân ch m đ ng 8 byte 15 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
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ì
bi n n{y cũng g i là bi n c c b
for (int a = 0; i<10; i++){
nh p n i dung }
Trang 32type tên_bi n = giá_tr _kh i_t o; int a = 0;
type tên_bi n (giá_tr _kh i_t o); int a (0);
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
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
#include <iostream>
using namespace std;
#include <iostream>
#include <string>
Trang 34string a abc return 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 011) N u là h ng s nguyên th p l c phân, thì nó b t đ u b ng 0x (ví
d 0x1b) 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 (0x12 hay 0X1 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 10) 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
(om 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
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 = 5;
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:
không thay đ i (10) Dòng l nh [8.] 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à 4 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 3 và 2 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: