1. Trang chủ
  2. » Giáo án - Bài giảng

lập trình hướng đối tượng

231 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 231
Dung lượng 4,89 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 9

nă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 11

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

Trang 12

mã 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 13

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

Trang 14

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

Hình 5 - T o m i d án

Trang 15

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

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 17

main 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 20

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 )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 21

Hì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 23

Visual 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 24

trì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 25

trong 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 27

m 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 28

Ch 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 29

thu 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 30

khai 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 31

Cá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 32

type 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 33

Gi 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 34

string 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 35

ngay 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 36

dò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 37

Khi 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 38

Th 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 39

toá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 40

Chú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:

Ngày đăng: 16/05/2019, 17:18

TỪ KHÓA LIÊN QUAN

w