1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình c++ lập trình hướng đối tượng

496 93 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 496
Dung lượng 6,75 MB

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

Nội dung

Chương 3 nói về một khải niệm truni* t âm cùa lập trình hướng đối tượng là lớp gồm: Dịnh nghĩa lớp, khai báo các bien, mả n g đối tượng kiểu ỉóp, pliưong ilìửc, dùr.g c j n trỏ this tron

Trang 3

LỜI NÓI ĐẤU

Lập trình cấu trúc là p h ư ơ n g p há p tồ chức, phân chi a c h ư ơn g trình t hành các hàm, thủ tục Ch ủ n g d ược d ù n g đ c x ứ lý d ữ liệu nhưng lại tách rời các câu trúc d ừ liệu

Th ô n g q u a các ngôn n g ừ Foxpro Pascal, c da s ố n hữ n g người làm Tin học đà khá

q u e n biết với p h ư ơn g p h á p lập trình này.

Lặp trình h ư ớ n g đôi t ư ợ n g (objcct-oricnicd pr ogrammi ng) dựa trẽn việc tô chức chương trình thành các lớp (class). Khác với hàm và thù tục, lớp ỉà một đơn vị bao gôm

cả dừ liệu và các ph ư ơn g t hức x ử lý Vì vậy lớp cỏ thê m ô lả các t hực thê một cách chân thực, đầy đủ cà phẩn d ừ liệu và yêu cầu quán lý T ư t ưởng lập trình hướng đôi tượng được áp d ụ ng cho hầu hết các ngôn n g ữ mỏi chạy trên môi trường Wi ndows như Microsoft Access, Visual Basic, Visual c Vì vậy việc nghi ên cứu phương pháp lập trình mói này là rất cần thiết đối với tất cả n hữ n g người quan tâm, vêu thích Tin học.

c ‘h ra dời n ă m 1973 với mục đích ban đ ầ u ỉà dề viết hệ đi ều hành Unix trên máy tính mini PDP Sau đỏ c da đ ư ợ c s ử đ ụ n g r ộng rài trẽn nhiêu l oại máy lính khác nhau

và đà trò thành một ngôn n g ừ lập trình cấu trúc rât được ưa c h u ộ n g trẽn toàn the giới.

Để đưa c vào the giới h ư ở n g đối tượng, năm 1980 nhà khoa học người Mỹ

B Stroustrup 1 đ à c h o ra dời một ngôn n g ừ c mới có tên ban đầu là "C cỏ lớp", sau đó đén nãm 1983 thì gọi là c ** Ngôn n g ừ c là một s ự phát triển mạnh I 1 ÌÕ cùa c Trong

c ' chant», những d ư a vào tất cà các khái niệm, công cụ c ù a lặp trinh lìirởng đôi tượng mà còn đưa vào nhiêu khả n ă n g mới mẻ c h o lìàm Nh ư vậy c là một ngôn ngừ lai cho phcp

tô chức durant* trình theo các lớp và các hàm c ỏ thê nói c~~ đà thúc đây ngôn rigữ c vỏn dà rất thuvêt phục đi vào thô giới lập trinh hướng dối t ượng và c* ’ dà trờ thành ngôn

n g ừ hưởng đôi t ư ợ n g nôi bật irong những năm 90.

C u ố n sách này sẽ trinh bày một cách hệ t hống các khái ni ệm của làp trình hướng đối t ư ợ n g dược cài dặt t r ong c n h ư lứp dôi urợng (object), s ự t hừa kẽ (inheritance),

tinh t ươn Li ứng bội (polym orphism ) v à các khả n ă n g mới t rong x ã y dựng, s ử dựng hàm nhu : dối t ham chi ếu, dôi mặ c định, h à m i rùng ten, h à m toán tử C ó một sô vân đẽ còn ÍI dược biết den lìhir cách x â y d ự n g hàm với sổ dối bất định t r ong C cũng se được giỏi thiệu Các chương lừ 1 d e n 11 với cách giải thích li mi và với gân 100 chương trình

mi nh họa SÜ cung cap c h o bạn dọc các khái niệm, p h ư ơn g p há p và kinh nghiệm lộp trình hirởnu, dối t ơ ự n g trẽn c C ó một phụ lục cuối sách ( Ph ụ lục 6) sC hộ t hông ngủn uọn plnronu pháp phân tích, thiết kc và lập trình h ư ớ n g đối t u ợ n g trôn hình diện chung.

Cu õ n sách u ô m 12 c h ư ơ n g và 7 phụ lục.

Chưư/Iị* ì l ui ỏi m dần cácỉì làm việc vái plum m ề m T C 3.0 dc tlìừ nghiệm các

c h ư o n g trinh, trinh b à y SƯ lược về các p h ư ơn g pháp lập trinh và giới thiệu một sô mở rộng đ ơ n giản c ú a c

Clìỉtơnx 2 trinh bày các khả n â n g mới trong việc xây d ự n g và s ử dụng hàm trong

c n h ư bien t ham chi êu, dôi cỏ kiêu t ham chiêu, dôi cỏ g i á trị mộc (lịnh, hàm trực

t uyến, hàm trùng tên, h à m t oán lử.

Chương 3 nói về một khải niệm truni* t âm cùa lập trình hướng đối tượng là lớp gồm: Dịnh nghĩa lớp, khai báo các bien, mả n g đối tượng (kiểu ỉóp), pliưong ilìửc, dùr.g c j n trỏ this tron« phương thức, phạm vi truy xuẩl cùa c ỉx ilìâr h phán, các phương thức toán tử.

‘ 1 Tác uiã etìu c là nhà khoa học Dei.i'.ls Ritchie.

(2) Björne Slroustmp's và Dennis Ritchie íteu làm việc ở Bell Lab (Mỹ) - nơi quy tụ ral nhiều nhà khoa học và nghiên cửu hàng dầu về lĩnh vực máy tinh.

Trang 4

C hư rng 4 trình bày các vắn đề tạo dựng, sao chop, huỷ bỏ các dối t ượng vả các vấn

đề khác có liên quan như: Hàm tạo, hàm tạo sao chép, hàm huý, toán tử gán, cấp phái

bộ nhớ cho đối tượng, hàm bạn lớp bạn.

Chmrtiịi 5 trinh bày một khái niệm quan trọng tạo nén khả năng mạnh của lặp trinh hưởng dôi t ượng trong việc phát triền, mớ rộng phân mèm, đỏ là khả nảng thừa kê cùa các lớp.

Clnnm g 6 trình bày một khái niệm quan trọng khác cho phcp xử lý các vấn dề khác nhau, các thực thê khác nhau, các thuật toán khác nhau theo c ù ng một lược đồ thorn* nhất, đó là tính t ương ừng bội và phương thức ảo Các công cụ này cho phép dề dàng tô chức chương trình quàn lý nhiêu dạng dôi t ượng khác nhau.

Chương 7 trình bây các thao tác trẽn tệp như: tạo một tệp mới, iihi d ừ liệu t ừ bộ nhở lẽn tệp, đọc d ừ liệu từ tệp vào hộ n h ớ ,

Chương 8 nói về việc tố chức vào/ra trong c c dưa vào mội khái niệm mới gọi

là các dòng tin (Stream) Các thao tác vào/ra sẽ t hực hiện trao dôi dừ liệu g i ũ a bộ nhớ với dòng tin: Vào là chuyển dữ liệu từ c o n g nhập vào bộ nhớ ra là chuyền d ữ liệu từ

bộ nhớ lẽn dòng xuất Đẻ nhập xuất dừ liệu trẽn một thiết bị cụ thể nào, ta chi cần gán dòng nhập xuât với thiêt bị dỏ Việc tô chức vào ra theo cách n h ư vậv là rảt khoa học

và tiện lợi vì nó có tính độc lập thiết bị.

Clurœig 9 trinh bày các hàm dồ họa s ử d ụ n g trong c vả c Các h à m này được sứ dụnii rải rác trong toàn bộ cuốn sách đế xây dựng các đổi t ượng dồ họa.

Chương 10 trình bày các hàm truy xuất trực tiếp vào bộ nhở cùa má y tỉnh, trong đó

có bộ nhớ màn hỉnh Các hàm này sỗ được s ử d ụ ng trong chương 11 để xây d ụ n g các lớp menu và cửa số.

C'hương / ' giới thiệu 5 chương trinh t ương đối hoàn chinh n àm mi nh họa thêm khả năng và kỹ thuật lập trinh hưởng đối tượng trẽn c ”

Chương 12 trinh bày t hêm một sô chương trinh hướng đôi l ượng trẽn c Đây là các clurơng trình tương dối phức tạp, hữu ích và sử dụng các công cụ rnạnh của c .

Phụ lục / trinh bày các phép toán trong c và t hứ t ự ưu liên cùa chúng.

Phụ ¡ục 2 liệt kê một danh sách các từ khoá cùa c

Phụ lục 3 trình bày bàng mã ASCII và mã quét của các ký tự.

Phụ lục 4 trinh bày một vấn dè quan trọng nhưng còn ít được nói đ ế n trong các tài liệu, đó là cách s ử dụng con trỏ void đê xây dựng các hàm với số dôi không cô định giông như các hàm printf và s c a nf của c .

Phụ lục 5 sể giới thiệu tóm tẳt hơn 200 hàm dê bạn đọc tiện việc tra cứu (Vì trong

Nhân dịp này ch ú n g tôi xin chân thành cám ơn Thạc sĩ Nguyền Văn Phác dà tận tinh giúp đ ờ trong việc hiệu đinh ' ' à biên tập cuốn sách này.

CÁC TÁC GIẢ

Trang 5

C h ư ơ n g I

C " & LẬP TRÌNH HƯỚNG ĐÔI TƯỢNGm m

TrotĩiỊ chirơM Ị này trìnli bày các vấn dè sau:

- ( 'ácli.sir iliing phân mỡnt'IX ' 3.11

- X liih iii sư a d ũ i c ầ n tliiết một c h ư ơ n g tr ìn h c đ ê b iế n n õ th à n h m ột

C':VIV B( il cliửa các lộp tluỏi BG1 và Cl IR

C:\TC\liIN chứa các lộp chương trinh (duôi EXE) nh ư T C T C C TI.IB,

T I.INK

C:\TC\IN CL UDK chửa các tệp liêu dề duôi 11

C :\Tl'\I.IB chứa các tệp đuôi LIB OBJ

l)ô vào mỏi trưừníi cua T C " chi cần thực hiện tệp ch ư ơ n g trình TC trong th ư mục C:\TC\BIN Kết qua nhận dược hệ m e n u chính cùa T C ’ ' với màu nền xanh uẩn uiống như hệ menu quen thuộc c ủ a T C ( Turbo C) Hệ menu cua T C ” uồm các menu: File Edit Search, Run Compile, Debug, Project Options Window Help

C ách soạn tháo, bien dịch và chạy chương trình trong T C " cũng giống như tro lili TC, nuoại Irừ diêm sau: Tệp cliươnti trình trong hệ soạn thào của

T C ” có đuôi mặc dịnli lá ( T P còn Irong T C lliì tệp chư ơng trình luôn có

duôi c.

hiện d u r ư i m trình c ' cun climu đuôi CPP dê dặt lên cho tệp chư ơ ng trình

Trang 6

- Vi c là sự m ơ rộng c u a c nên bán thân m ộ t c h ư ơ n g trình c đã là chương trinh c " (chi can thay đuôi c ba ng đuôi CPP) T u y nhiên Trình

khai báo imuyên mầu b à n g một câu lệnh //include, trong khi diều nảy không bát buộc dối với Trình biên dịch của TC

khai báo nguyên mẫu của h àm dược dùng Diều này k h ô n g báo lỗi khi biên dịch, nhưng có the dẫn đèn kểt qua sai khi chạy chương trình

Ví dụ khi biên dịch ch ư ơ n g trình sau trong m ôi tnrờng c sC không gặp các dòng cả nh báo (warning) và thông báo lồi (eiTor) N h u n g khi chạy sẽ nhận dược két quả sai

Dc biến chươnsỊ trình ircn thành một chương trinh c +^ cằn:

* Đặt tên chương trình với duôi CPP

+ Them 2 câu lệnh //includc dc khai háo nguyên m ẫ u c h o các hàm sqrt,uetch:

IIi n c l u d e < m a t h h >

iỉ i n c l u d e < c o n i o h >

6

Trang 7

§ 3 LẬP TRÌNH CẤ U TRÚC & LẬP TRÌNH Đ ố l TƯ Ợ NG

3.1 Phuo'ng p h á p lập trình cấu trúc

các ch ư ơ n u trình con Trong PASC A L có 2 kiêu ch ư ơ n g trình con là thủ tục

Hàm là một dơn vị chương trình dộc lập d ù n g để Ihực hiện m ột phần việc nào đó như: N h ậ p số liệu, in kết q u ả hay thực hiện một số tính toán Hàm cẩn cỏ đối và các biến, mảng cục bộ dùng riêng c h o hàm

Việc trao dối d ữ liệu giữa các hàm thực hiện thông q u a các dối và các biến toàn bộ

triên khai ph irons’ pháp lập trinh cáu trúc

MỘI c h ư o n g trình cấu trúc gồm các cấu trúc d ữ liệu (như biến, màng, ban ghi) và các hàm thú tục

Nhiệm vụ chính cua việc tố chức thiết kế ch ươ ng trình cấu trúc là tổ chức clnrơnu trình thành các hàm, thú tục: C h ư ơ n g trình sẽ bao gồm các hàm thu tục nào

Ví dụ xét yêu cầu sau: Viết chương trình nh ập toạ độ (x, y) c ủ a m ộ t dãy điềm, sau đó tìm một cặp điểm cách xa nhau nhất

Trên tư tướng cùa lập irình cấu trúc có thể tổ chức chương trình nh ư sau:

+ Xây dựntì 2 hàm:

I làm nhapsl dùng dể nhập loạ dộ n điểm, hàm này có một đối là biến

VO i d n h a p s 1 ( i riL n) ;

I làm do dai d ù n u đế tính độ dài đoạn thẳng đi q u a 2 điếm có chỉ số là i

và j, nó dưựe khai báo nh ư sau:

Trang 9

ng oài (phía d ư ớ i ) phần định n g h iă lớp c ấ u trúc (các h viết) p h ư ơ n g thứ c tư ơ n u lự n h ư h àm nuoại trừ q uy tắc sau: Khi x â y d ự n g m ộ t p h ư ơn g thứ c bên ngoài d i n h imhìa lớp thi tr o n g d ò n g d â u tiên c â n d ù n g tên lớp

v à 2 d ầ u : d ặ l t n r ớ c tên plurơng thức dê chi rõ p h ư ơ n g th ứ c th uộc lớp

n á o ( x e m ví dụ b ê n dưới)

+ Sứ dụng các thành phần dừ liệu trong phươn g thức: Vì phươn g thức

và các thành phan dừ liệu thuộc cùng một lóp và vì p h ư ơn g thức dư ợc lập lên cốt dế x u lý các thánh phần d ù liệu, nên trong thân của phươn g thức có quyền truy nhập đốn các thành phần d ữ liệu (của cù ng lóp)

thành phần dừ liệu và các plnrơnu thức Lời gọi một phươn g thức cần chứa

+ Một clurơnsì trình h ư ớ n g đối t ư ợ n g SC bao g ồ m c á c lớp có quan

kế lớp c ơ sử lớp dần xuất, tươim ứng bội, phươn g thức á o ,

+ Ư u đ iế m c ù a việc thiếl kề h ư ớ n g dổi tư ợ n g là tậ p t r u n g x á c định các lớp đo mô tã các tlụrc thổ cùa bài toán Mồi lớp đ ư a v à o cá c thành

ph àn d ữ liệu c ù a th ụ c thô và xây d ự n g luôn các p h ư ơ n g ihíre dê xir lý

d ữ liệu Nlur vậy việc thiết kố c h ư ơ n g tr ìn h xuất phát t ừ c á c nội dụng, các vân d c c ù a bài toán

+ Các ngôn niùr thuần tuy hư ớng đối tượng (như Smalltalk) chi hỗ trợ các khái niệm vồ lớp khôim cỏ các khái niệm hàm

» (■ là niiôn Iiỉũr lai nó cho p h é p sir d ụ n g cà c á c c ô n g c ụ c ủ a lớp

và hà m

I X m i n h h ọ a c á c khái niệm v ừ a n ê u về lậ p tr i n h h ư ớ n g đối t ư ợ n g

ta tr ớ lụi xct bài lu á n tìm (.lộ dài l á n n h â t đi q u a 2 d i ê m T r o n g bài toán này la lìặp một thự c Ihé là d ày đ i ế m C á c t h à n h p h ầ n d ữ liệu c ù a lớp

d ã y di ốm uỏm:

- Biến nguycn n là số diêm của dãy

Trang 10

Các phương tl'úc cầ n dira vào theo yêu cầu bài toán gồm:

- Nhập tọa độ một diem

- Tính d ộ dài doạn ihắnc đi qua 2 điểm

Dưới dây là chirưnsi trình viết theo thiết kế h ư ớ n g dối tượng Đề thực hiện chương trình này nhớ đặt tên tệp có duôi CPP X e m c hư ơ ng trinh ta

Các khai báo biến, m ã n g có thể viết bất kỳ chỗ nào Irong chư ơng trình (tất nhiên phái trước khi sử dụng biến, màng)

Trang 11

T ro n g mục này trinh bày một số m ờ rộng cùa C H\ tuy dơn giàn, ngắn gọn nh ưng dem lại rất nhiều tiện lợi.

4.1 Viết c á c d ị n g gh i chú

T ro ng c ’ 1 vẫn cĩ the viết các dịníi ghi chú trong các d ấ u /* và */ như trơnư (' Cách này cho phép viel các uhi chú trên nhiều d ị n g hoặc trên một dịnu Nuói ru trong c ' ' cịn cho phép viết ghi c h ú trên một d ịng sau 2 dấu gạch ché o, vi dụ:

4.2 K h ai b á o linh hoat

khối Do vậy nhiều khi, vị iri khai báo và vị trí sữ d ụ n g cùa biến khá xa nhau, g ây khĩ khă n trong việc kiểm sốt chương trình C “ đã khắc phục

nhược điể m này bà ng cách cho phép các lệnh khai báo biến, m á n g cĩ thê đặt

bất kỳ c h ồ nào trong c h ư ơ n g trình trước khi các biến, m à n g được s ừ dụng

Vi dụ c h ư ơ n g trình nh ập một dãy số thực rồi sắp xếp theo t h ứ tự tăng dần cĩ

thê viel trong c ' ' nh ư sau:

Trang 13

4.4 I l ằ n g có kiểu

Dc tạo ra một hãim có kiêu, ta s ử d ụ n g từ kho á const đặt trước một khai

háo cỏ khởi gán giá trị S au dây là một số ví dụ

Trang 14

b Mọi câu lệnh nhầm thay đối giá trị hằng có kiểu đều bị báo lỗi khi biên dịch chương trình Ví d ụ nếu trong chương trình đư a vào câu lệnh:

Còn trong c 1 một hang ký tự dược xem là giá trị kiểu char và có kích

s i z e o f ( ' A ' ) = s i z e o f ( c h a r ) = 1

4.6 L ấy địa chỉ c á c p h ầ n tử m ả n g thực 2 chiều

Trong T C 2.0 không cho phép dùng phcp & dế lấy địa chi các phần tử

m á ng thực 2 chiều Vi vậy khi nhập một ma trân thực (dùng scanf) ta phái nhập qua một biến trung gian sau dó mới gán cho các ph ần từ màng

Trong T C " 3.0 cho phép lấy dịa chi các phần từ m à n g thực 2 chiều, do

đó cỏ the dùng scan f dô nh ập trực tiếp vào các phần t ử m ả ng

Chư ơng trình C " dưới dây sẽ minh họa diều này C h ư ơ n g trình nhập một ma Irận thực cap mxn và xác định phần tử có giá trị lớn nhất

Trang 15

để nh ập các ỉiiá trị số (nguyên thực) từ bàn phím và gán cho các biến.

Dỏ nhậ p một dày khôn g quá n ký tự và chứa vào m ả n g lì (kiểu char) có thê d ù n u phươnu thức cin.eel như sau:

c i n g e L ( h , n ) ;

C h ú Ỷ ỉ: T o án lử n h ậ p cin » sẽ đô lại ký tự c h u y ê n d ò n g fc\ n ’ trong

bộ dộm , k ý tự này có thổ làm trôi p h ư ơ n g thức cin.get Đc khắc ph ục lình

tr ạn g trẽn cân d ù n g p h ư ơ n g thức c i n ignore đê bò q u a m ộ t ký t ự chuyên

Trang 17

C ác hàm này cần đặt trong toán ur xuất r.hư sau:

ĐAI HỌC QUỐC GIA HA NỌI_

ĨRUNG TẦM ĨHỎNG TIN THƯ V!ẾN

Trang 18

6.1 T ê n sau t ừ k hoá stru ct đưọ'c x e m n h ư tên k iể u cấu tr ú c

Trang 19

T ô n k i ồ u ct- d a n h s á c h b i ế n , mỏng c ấ u t r ú c ;

Vi dụ sau sẽ: Dịnh nghĩa kiểu cấu irúc TS (thí sinh) gồm các thành phần: ht (họ tên), sobd (số báo danh), dt (điểm toán), dl (điểm lý), dh (điểm hoá) và td (tống diêm), sau đó khai báo biến cấu trúc h và m ã ng cấu trúc ts

d ù n a nó đố khai báo N h ư vậy để khai báo các biến, màng kiểu hợp trong

th ờ i s ứ d ụ n g thì có thố khai báo chú ng trong một union không tên nh ư sau:

u n i o n

{

i n t i ;

Trang 20

7.1 Trong C ' ' có thế sừ dụng các hàm cấp phát bộ nhở dộng cùa c như: hàm

malìoc dô cap phát bộ nhớ, hàm free để íiiài phóng bộ n h ớ được cấp phát

I;

Trang 21

7.2 Ngoài ra trong c ' còn dua thêm toán Hr new dể cấp phát hộ nh ớ và

7.3 Cách dùng toán tứ new dồ cấp phát bộ nh ớ n h ư sau:

t- Trước hot cần khai háo một con tro đỏ chira đ ị a chi vùng nh ớ sè dirợc

cấ p phát:

K i ể u * p ;

ở dây Kiêu có thê là:

- các kiêu d ữ liệu chuồn cùa C ' ’ như int long, float, double, c h a r ,

- các kill'll do lập trinh vieil dịnh nghĩa nliir: máng hợp câu trúc, l ớ p + Sau dỏ dùng toán lir new lhco mầu:

7.4 l i a i c á c h Iviểni tra s ự th àn h c ô n g củ a new

Khi dùnu câ u lệnh:

h o ặ c c â u l ệnh:

Kiểu *p n o w Kiểu;

d ẻ e â p p h á i b ộ n h ớ s e x u à i h i ệ n m ộ t t r o n g 2 t r ư ờ n g h ợ p : t h à n h c ô n g

h o ặ c k h ô n g i hànl ì c ồ n g

N eu thành cô n g thì p sẽ chửa địa chi đầu vùng nh ớ dược cấp phát

N eu không thành côn li thì p = NULL

Doạn clurơim trình sau minh họa cách kiêm tra lồi câp phát bộ nhớ:

Trang 22

+ Xây d ự n g m ộ t h à m d ù n g dồ k i ể m tra s ự t h à n h c ô n g c u a n e w

+ G án tê n hàm này c h o con trỏ n e w h a n d l er

N h ư v ậ y h à m k i c m t r a sẽ dirợc gọi mồi khi c ó lỗi x ẩ y r a t r o n g toán

pci - now d o u b l e I n J ; / / Khi x ẩ y r a l ồ i s ẽ g ọ i hàm k i ể m t r a new

C ltú ý: Có thê dùng lệnh gán đê gán lên hàm x ử lý lồi cho con trỏ new handler như trong đ o ạn chương trình trên, hoặc d ù n g hàm:

s e t now h a n d l e r ( T ê n h à m ) ;

(Xem các chương trình minh họa bên dưới)

7.5 T oán tủ delete d ù n g đ ế giiii phó ng v ù n g nhó’ đ ư ợ c cấ p phát bỏi new

7.6 Ilai cỉuroìig trình m in h họa

Chư ơng trinh thử nhất minh họa cách dùnu n e w dế cấp phát bộ nhớ

c h ứ a n thi sinh Mồi thí sinh là một cấu trúc g ồ m các trường ht (họ tên), sobđ (sổ báo danh) và td (tổng điểm) Chương trình sẽ nhập n, cấp phát bộ

Trang 23

nh ớ c h ứ a n thí sinh, kiêm tra lỗi cấp phát bộ n h ớ (dùng cách 1), nhập n thí sinh, sắp xếp thí sinh iheo Ihứ tự giảm cùa tồng điểm , in danh sách thí sinh sau khi sắp xếp và cuối cù n g là giái phóng bộ n h ớ đã cấp phát.

Trang 24

và sừ dụng hàm rất tiện lợi Diều này SC irìnli bày kỹ trong chương sau Trong mục này chi thốnii kê mộl số điếm mới về h àm m à c ' 1 đ ư a vào.

8.1 Dối kicu tliani ch iế u

xây d ự n g cũ ng như sứ dụng hàm khá phiền phức T ro n g c " đ ư a vào dôi kiêu tham chiếu (giống nh ư PASC A L) dùng đê chứa kết q u á cua hàm, khiến cho việc tạo lập cũ ng nh ư s ử d ụ n g h àm đơn giàn hơn

Trang 25

8.2 D ổi t ham chiếu const

Dối iham chiểu cỏ dặc diêm là các câu lệnh trong thân hàm có thê truy nhập lói và dồ đàim làm cho giá trị cùa nỏ thay dôi Nhiêu khi ta muôn dùng đôi kicu iham chicu clìí dò tăng tôc dộ trao dôi d ữ liộu giữa các hàm, không muôn dim e nó dô chứa kỏi quà cùa hàm Khi dó có the dùng dôi tham chiêu const dê hao loàn uiá Irị cua đôi trong thân hàm

8.3 Dối có ịịiá tri niiìc dinhn ■ * 0

Tro nu nhiều tnrờn li hợp nuười dùng viết m ộ t lời gọi hàm nhưng còn

c h ư a bici nên ch ọ n giá irị nào cho các đối Dô khác phục khó khăn này C ’ f

đ ư a ra yiái pháp dối có giá trị mặc định Khi xây d ựng hàm, ta gán giá trị

m ạ c dịnh cho một so dối Naười dùng nốu không cu n g cap giá trị cho các đối này thì hàm sẽ dùng íiiá trị mặc định

8.4 H à m inline

Dối với một đoạn clnrơnu trình nhò (số lệnh không lớn) thi việc thay các doạn c h ư ơ n g trinh này bànu các lời iiọi hàm sê làm cho c hư ơng trình uọn nhọ dôi chiu nhưng làm lãng thời ỉìian máy T ro n g các trường hợp này

c ỏ thô dùng hàm irực tuyến (inline) vừa giám kích thước chương trình nguồn vừa khòim làm lăng thời gian chạy máy

8.5 C á c hìim t r ù n g tên (cỉỊnli nghĩa c h ồ n g c á c h à m )

1)0 lấy íìiá trị luyộl dối của một sổ tro nu c cầ n iộp ra nhiều hàm với tên khác nhau, ví tlụ abs cho số nguyên, tabs cho số thực, labs cho số nguyên dài cabs cho số phức Diều này rõ ràng íỉây phiền toái cho người sử dụng

dối N h ư vậy chi cần lập một hàm đê lấy giá trị tuyệl dối cho nhiều kiêu dữ liệu khác nhau

8.6 Địn h n ghĩa ch ồn » toán từ

Việc d ù n g các phép toán thay cho một lời gọi hàm rõ ràng làm cho

c h ư ơ n g trinh ngan gọn, sáng súa hơn nhiều Ví dụ để thực hiện phép cộng 2

m a trận nếu dù ng phcp cộ n g và viết:

c A I H;

thì rai ttần vcri toán học Trong c ‘’ cho phép dùng các phép toán chuẩn đỏ dặt lên cho các hàm (uọi là dịnh nghĩa chon g toán từ) Sau dó có thể thay lời gọi hàm banu, các phép loán như nói ờ trên N h u vậy một phcp toán m ang nhiều ý nuhTa ví dụ phép + có thè hicu là công 2 sô nguyên 2 sô thực hoặc

2 m a trận, c ' sò căn c ứ vào kicu của các sô hạng mà quyêt dịnh chọn phcp

c ộ n ụ cụ thò

Trang 26

C h ư ơ n g 2

HÀM TRONG C++

C hư ơ ng n à y trình bày n h ữ n g kh ả năng m ớ i củ a c " trong việc xây

d ự n g và s ử (lụng hàm Đó /à:

- Kiêu tham chiếu và việc truyền d ữ liệu cho hàm bằng tham chiếu.

- Đổi cỏ giá trị mặc định

- Hàm trực luyến

- Việc định nghĩa chồng các hàm

- Việc định nghĩa chồng các toán từ

§ 1 BIẾN THAM CHIỂU ( R E F E R E N C E VARIABLE)

1.1 Hai loại biến d ù n g t r o n g c

Trước khi nói đến biến tham chiếu, chún g ta nh ắc lại 2 loại biên gặp trong c là:

Biến giá trị dùng để c h ứ a d ữ liệu (nguyên, thực, k ý t ự , )

Biến con trỏ dù ng để chứa địa chỉ

Các biến này đều dược cung cấp bộ nhớ và có địa chi Ví dụ câu lệnh khai báo:

d o u b l e X, * p x ;

sẽ tạo ra biến giá trị kiểu double X và biến con trò kiểu double px Biến

X có vùng nh ớ 8 byte, biến px có vùng n h ớ 4 byte (nếu dùng m ô hình Large) Biến X dùng đế c h ứ a giá trị kiểu double, ví d ụ lệnh gán:

Tro ne c ++ cho phép sử dụ ng loại biến thứ ba là b iế n tham chiếu So với

2 loại biến quen biết nói trên, thì biến này có những đ ặ c đi ê m sau:

Trang 27

+ Biển tham chiếu không dược cấp phát bộ nhớ, không có địa chi riêng.

+ N ó d ù n g làm bi danh cho một biến (kiểu giá trị) nào d ó và nó sử dụng vùng n h ớ cùa biến này Ví dụ câu lệnh:

f l o a t u , V, &r = u ;

cấp phát bộ nhớ, nó là một tên khác (bí danh) của u và nó d ù n g chung vùng nhớ c ù a hiến u

T h u ậ t n g ữ : Khi r là bi da nh (alias) c ủ a u thì ta nói r tham chiếu đến

Ý nghĩa: Khi r lủ bí danh của u thì r dùng chung vùng n h ớ cùa u, do đó :

+ T ro ng mọi câu lệnh, viết u hay viết r đều có ý nghĩa nh ư nhau, vì đều truy nh ập đến c ù n g một vùng nhớ

t- C ó ihê d ù n g biển tham chiếu dể truy nhập đến m ộ t biến kiểu giá trị

C ô n g dụng: Biến tham chiếu thường được sử dụng làm dối c ù a hàm đổ

cho p h é p h à m truy nhập dến các tham số biến trong lời gọi hàm

Vài ch ú V về biến th am ch iếu:

biến kiên giá trị nôn trong khai báo phái chi rõ nó tham chiếu dến biển nào

Ví dụ nếu khai báo:

Trang 28

Vi dụ nếu khai báo:

Trang 29

p\ p \ 1 I // Sai 11 mil biên dịch thônii báo lôi:

// Cann ot modify a const object

C á c h d u n » : Haim lham chiếu cho phép sử dụng giá trị chứa trong một vùng nhớ n h u n u khônsi cho phép thay dôi giá trị này

Hằn g tham chiếu thường dược s ử d ụ n g làm đối c ú a h àm đế cho phép

h àm sử d ụ n u ui á trị cua các tham sổ trong lời gọi hàm, nh ưng tránh không làm thay đôi uiá trị cua các tham số

§ 2 T R U Y Ề N GIÁ TRỊ CHO HÀM THEO THAM CHIẾU

2.1. H à m t r o n g c

Tro nu c chi có một cách tru ven d ữ liệu cho hàm theo giá trị :

Cắp phát vùnu n h ớ cho các dối

+ G á n iiiá Irị các t h a m số t r o n g lời gọi h à m c h o c á c đổi s a u đ ỏ

h àm là m v i ệ c tr ê n vù n u n h ớ c ủ a c á c dối c h ứ k h ô n g liên q u a n gì đ ê n

c á c ill am số

Nhu vậv diưoriii trình sò lạo ra các ban sao (các đối) cùa cá c tham số và hàm sẽ thao lác liên các háu sao này ch ứ không làm việc trục liếp với các tham số Ph ư ơn g pháp này có 2 nhược điếm chính:

tác trục liếp Iron các tham số, vì vậy khô ng làm thay đôi dư ợc giá trị các tham số

2.2 T r u y ề n g i á trị c h o h à m t h e o t h a m c h i ế u

T ro ng C ’ ’ c u n u cấp thêm cách truyền d ữ liệu cho h àm Ihco tham chiếu bang cách d ù n g dối là biến th a m chiếu hoặc đối là hàn g th a m chiếu Cáchnày có ưu diêm:t/

Khôim càn lạo ra các bán sao cùa các tham số, do đó tiết kiệm bộ nhớ

và ihời ụian ch ạy máy

I l à m sè thao l á c i r ự c l i ế p trên v ù n g n h ớ c ủ a c á c t h a m s ổ , d o d ó d ễ d à n g

i h a y d ô i g i á trị c á c t h a m s ô k h i c â n

Trang 30

2.3 M ối q u a n hệ giữa đối v à t ham số tro n g l ò i gọi h à m

Nếu đối là biến hoặc h ằn g tham chiếu kiểu K thì th a m số (trong lời gọi hàm ) phải là biến hoặc phan t ừ mảng kiểu K Ví dụ:

+ Đối là biến hoặc h ằn g tham chiếu kiểu double, thi th am số là biến hoặc phần tir mảng kiều double

+ Đối là biến hoặc hằng tham chiếu kiểu cấu trúc, thì tham số là biến hoặc phần t ừ mãng kiểu cấu trúc

Trang 31

- Sắp x ế p d ã y thí sinh theo th ứ tự giảm c ủ a tồng điểm

- In một cấu írúc (in họ tên và tổng điếm)

C h ư ơ n g trinh sẽ nhập d ữ liệu một danh sách thí sinh, nhậ p điểm chuẩn

và in dan h sách thí sinh trúng tuyền

Trang 33

maxminds(p, n, vtmax, vtmin);

pr irvtf ("\nllang ‘¿ d Phan tu m a x = % 6 1 f tai cot

% d " , i , p[vtmax], vtmax);

p r i n t f ( " \ n Phan tu m i n =

% 6 1 f t a i c o t %d", p [ v t m i n ] , v t m i n ) ;

g e t c h ( ) ;

§ 3 HAM TR A V E CAC THAM CHIEU

Ham co the co kieu lham chieu va tra ve gia tri tham chieu Khi do co ihc dung ham de truy nhap den mot bien hoac mot phan tit m a n g nao do

D u a i day la m o t so vi du

Vi d u 1 trinh bay mot h am tra ve mot tham chieu den mot bien toan bo

Do do co the d u n g ham de truy n h a p den bien nay

f f i n c l u d e < i o s t r e a n h >

♦I i n c l u d e < c o n i o h >

i n t

Trang 34

Ví (Ju 2 trình bày một hàm trà về bí danh cùa m ộ t biến cấu trúc toàn # # • •

bộ Khác với ví dụ trẽn, ở dây không dùng hàm một cách trực tiếp mà gán hàm cho một biến tham chiếu, sau đó dùng biến th am chiếu này đê iruy nhập đến bien cấu trúc toàn bộ

Trang 36

đ ịn h c h o các dối C á c dố i n ày có th ê có ho ặc k h ô n g có t h a m s o tư ơ n g

ứn g tr o n g lời gọi h à m Khi k h ô n g có ih a m số t ư ơ n g ứ n g , dối d ư ợ c khới g á n hơi giá trị m ặ c dị nil

4.2 Q u y tắc xây d ự n g h à m vói đối m ặ c định

+ C ác đối mặc định cằn phái là các dổi cuối cù ng tính từ trái sang phủi Già sir có 5 doi theo th ứ tự từ trái sang phủi là

d l , d 2 , d 3 , d 4 d S

Khi dó:

Trang 37

n ế u một dối mặc định thì phải là (15

n ế u hai dôi mặc dịnh thì phái là d4 d5

nếu ba dối mặc định thi phai là c!3 d4 d5

H- Giá trị d ù n g dô khởi uán cho đôi m ặ c định

C ó tlìổ d ù n g các hằnii các biến toàn bộ các h àm dể khởi gán cho dối mặc định, ví dụ:

i n t MAX = 1 0 0 0 0 ;

v o i d í ( i n l n , i n l m MAX, i n t x ma x = g c t m a x x () ,

Lnl y m a x q e t i n a x y ( ) ) ;

4.3 C á c h s ử (Iụn” h àin có dối m ặc định

I ời gọi hàm cần viết ihco quy định sau:

C ác Iham số thiếu vắng trong lời gọi hàm phải tương ứn g với các đối mặc đ ịn h cuối c ù n g (tính từ trái sang phải)

Nói cách khác: D ã dùnu giá trị mặc định cho một dổi (tấl nhiên phải là dối mặc dịnh) thì cũng phái sử d ụ n u giá trị mặc định cho các dối còn lại

Trang 38

Ví d ụ d ư ớ i đây tr ìn h bày h à m h iể n thị một ch uồi str tr ên m à n hình

dồ h ọa, tại vị trí (x, y) và có m àu m Các dối X, y v à m là mặc định

D ù n g các h à m g e t m a x x O và g e t m a x y O đe khởi g á n cho X, y D ù n g h ằ n g

Trang 39

h i e n d e ( " HEL LO" ) ; / / HELLO màu d ỏ g i ũ a m à n h ì n h

h i e n d e ("CIIUC MUNG", 1 , 1 ) ; / / CHUC MUNG m à u đ ỏ t ạ i

Trang 40

T u y nhiên hàm cũng c ó nhược điểm là làm chậm lốc dộ chương trình

d o phái thực hiện một số thao tác có tinh thù tục mỗi khi gọi hàm như: c ấ p phát vùn« nhớ cho các đối và biến cục bộ truyền d ừ liệu c ù a các tham số cho các dối giãi phóng vùng nh ớ trước khi thoát khỏi hàm

Ví dụ hàm f trong chư ơ ng trình sau sè không phải là hàm trục tuyến vì

t ừ khoá inline viết sau lời gọi hàm:

Ngày đăng: 03/12/2019, 00:05

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm