Giáo trình C++ - Lập trình hướng đối tượng (Phần 1)

ĐẶNG NGỌC HOÀNG THÀNH  
++  
C
LẬP TRÌNH HƯỚNG  
ĐỐI TƯỢNG  
Tài liệu học tập  
PHỤ LỤC  
T r a n g | 2  
T r a n g | 3  
T r a n g | 4  
T r a n g | 5  
T r a n g | 6  
GIỚI THIỆU  
1. Cấu trúc của giáo trình  
Gi|o trình được chia ra làm 17 chương và mỗi chương được chia làm  
các mục khác nhau. C|c chương được sắp xếp theo trình tự từ lập trình  
hướng thủ tục trên C++ đến lập trình hướng đối tượng và các lớp thư  
viện cơ bản. Độc giả có thể truy cập vào mục bất kì từ phần phụ lục nằm  
đầu sách. Nhiều mục bao gồm các ví dụ để mô tả cách sử dụng. Tôi  
khuyên các bạn nên đọc các ví dụ này và có thể hiểu mỗi đoạn mã  
chương trình trước khi đọc chương tiếp theo.  
Một cách thức tốt để tăng lượng kiến thức nhận được đó l{ h~y chỉnh  
sửa, bổ sung mã lệnh mới dựa trên ví dụ mẫu, theo hướng tư duy của  
của bản thân, để từ đó có thể hiểu một c|ch đầy đủ về nội dung mà ta  
tiếp thu được.  
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.  
nghiệp. Mọi sự đóng góp xin liên hệ theo địa chỉ email:  
dnhthanh@hueic.edu.vn. Hi vọng với các ý kiến đóng góp của các bạn,  
giáo trình này sẽ ngày càng hoàn thiện hơn.  
2. Một vài chú ý về sự tương thích của C và C++  
Chuẩn ANSI-C++ được một tổ chức tiêu chuẩn quốc tế thống nhất đưa  
ra. Nó được chính thức ra mắt v{o th|ng 11 năm 1997 v{ duyệt lại vào  
T r a n g | 7  
năm 2003. Tuy nhiên, ngôn ngữ C++ đ~ tồn tại trước đó một thời gian  
kh| d{i (v{o năm 1980). Trước đó, có rất nhiều trình dịch không hỗ trợ  
c|c tính năng mới bao gồm cả chuẩn ANSI-C++. Giáo trình này được xây  
dựng trên c|c chương trình dịch hiện đại hỗ trợ đầy đủ chuẩn ANSI-C++.  
Tôi đảm bảo rằng các ví dụ sẽ hoạt động tốt nếu độc giả sử dụng một  
trình dịch hỗ trợ ANSI-C++. Có nhiều sự chọn lựa, có thể là miễn phí hoặc  
các phần mềm thương mại. Trong giáo trình này, tôi giới thiệu đến các  
các bạn hai công cụ biên dịch C++ là GCC MinGW – miễn phí và Visual  
C++ - thương mại.  
3. Trình biên dịch  
Các ví dụ trong cuốn gi|o trình n{y được xây dựng chủ yếu trên chế  
độ console (m{n hình DOS). Điều đó có nghĩa l{ nó sử dụng chế độ văn  
bản để hiển thị các kết quả. Mọi trình dịch C++ đều hỗ trợ chế độ dịch  
console. Với một môi trường phát triển tích hợp IDE cho C++ miễn phí,  
chúng ta có thể sử dụng chương trình Codeblocks hoặc Eclipse. Chúng là  
các môi trường phát triển tích hợp hỗ trợ soạn thảo và biên dịch C++.  
chúng  
ta  
có  
thể  
tải  
phần  
mềm  
tại  
địa  
chỉ  
http://www.codeblocks.org/downloads. Đối với Eclipse, nó là một trình  
soạn thảo và biên dịch ngôn ngữ lập trình chuyên nghiệp nhưng ho{n  
toàn miễn phí (vì ta có thể cấu hình kết hợp với các công cụ biên dịch  
kh|c nhau để tạo ra môi trường phát triển tích hợp cho các ngôn ngữ lập  
trình khác nhau). Chúng ta có thể dùng nó để soạn thảo và biên dịch  
Java, PHP, JSP, Python… v{ hiển nhiên là cả C/C++. Đ}y l{ một dự án mã  
nguồn mở, tiêu tốn hàng triệu đôla của IBM. Để tải về bản mới nhất cho  
đến thời điểm n{y (năm 2010) l{ Eclipse Helios, ta có thể truy cập đến  
địa chỉ bên dưới1. Đối với Eclipse, chúng ta nên sử dụng kết hợp với  
tải về tại địa chỉ bên dưới. Với Eclipse, thì công việc cấu hình ban đầu  
tương đối phức tạp. Nhưng nó l{ một trình soạn thảo tuyệt vời. Ta có thể  
sử dụng nó để soạn thảo nhiều ngôn ngữ lập trình bằng c|ch c{i đặt  
thêm plugin hỗ trợ. Nhiều nhà phát triển đ~ sử dụng Eclipse làm nền tải  
1 http://ftp.jaist.ac.jp/pub/eclipse/technology/epp/downloads/release/helios/R/eclipse-cpp-helios-  
win32.zip  
2 http://nchc.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-  
inst/mingw-get-inst-20100831/mingw-get-inst-20100831.exe  
T r a n g | 8  
cho việc phát triển các ứng dụng của mình: Embarcadero sử dụng nó để  
phát triển JBuider, Adobe sử dụng nó để phát triển Flash Buider và rất  
nhiều các hãng phần mềm nổi tiếng khác.  
Nếu là một lập trình viên Java, Eclipse là một sự lựa chọn không thể  
bỏ qua. Nếu phát triển Flash theo dự án mã nguồn mở từ Adobe, Eclipse  
cũng l{ sự lựa chọn hoàn hảo. Nếu phát triển C/C++, với các trình soạn  
thảo thì Eclipse cũng l{ sự lựa chọn không tồi. Việc sử dụng thành thạo  
Eclipse sẽ là một lợi thế cho chúng ta khi tiến hành nghiên cứu Java, lập  
trình Web, Flex, Python… sau này.  
Bên cạnh đó, chúng tôi cũng giới thiệu môi trường phát triển tích hợp  
IDE Microsoft Visual Studio. Đ}y l{ trình biên dịch thương mại và là  
trình biên dịch chuyên nghiệp và nổi tiếng nhất trên hệ điều hành  
Windows. Ta có thể sử dụng để phát triển các ứng dụng trên nền NET  
hoặc các ứng dụng Win32. Nếu muốn phát triển các ứng dụng theo  
hướng của Microsoft, ta nên sử dụng Visual Studio. Phiên bản mới nhất  
đến thời điểm này là VS 2010. Nhưng cần lưu ý rằng, khi nghiên cứu  
ứ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.  
T r a n g | 9  
MÔI TRƯỜNG PHÁT TRIỂN TÍCH HỢP IDE  
1. CodeBlocks  
Trước tiên, chúng ta sẽ tìm hiểu cách tạo dự án, biên dịch một tập tin C++  
trên CodeBlocks. Độc giả cũng cần lưu ý rằng, CodeBlocks tổ chức công việc  
theo các dự án. Chúng ta có thể biên dịch từng tập tin cpp một c|ch đơn lẻ.  
Tuy nhiên, làm việc theo dự án sẽ giúp ích cho chúng ta rất nhiều khi làm  
việc với những tác vụ lớn.  
Đầu tiên chúng ta khởi động codeblocks, sau đó v{o File > New > Project.  
Trong hộp thoại hiện ra, chúng ta chọn console application (Hình 1).  
Và nhấp Go, sau đó nhấp Next. Trong hộp thoại tiếp theo, ta chọn C++ và  
nhấp Next.  
Hộ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.  
T r a n g | 10  
Biên dịch chương trình:  
+ Nhấp vào Build > Build and Run.  
+ Hoặc nhấp phím F9.  
Tự động định dạng mã. Khi viết một chương trình C++ hay bất kì một  
chương trình trên một ngôn ngữ lập trình nào  
khác, ta cần tuân thủ quy phạm định dạng mã  
nguồn. Có nhiều chuẩn mực cho c|c định dạng  
mã nguồn: chuẩn Hungary, chuẩn lạc đ{... Dù  
rằng, chúng không ảnh hưởng đến việc biên dịch  
chương trình, nhưng chúng giúp người đọc có  
thể dễ hiểu chương trình của chúng ta hơn. Nếu  
ta không nắm vững các quy phạm này thì có thể  
sử dụng chức năng định dạng mã nguồn tự động  
của CodeBlocks. Hãy kích chuột phải vào vùng soạn thảo, sau đó chọn  
Format this file (Astyle).  
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.  
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  
T r a n g | 11  
2. Eclipse Helios  
Sau khi tải xong Eclipe Helios về máy, hãy tiến hành giải nén tập tin.  
Chương trình Eclipse không yêu cầu chúng ta phải c{i đặt, nhưng nó có thể  
làm việc nếu trên máy tính đ~ c{i một máy ảo Java. Để tải về máy ảo Java,  
chúng ta có thể truy cập vào trang chủ của Sun (nay là Oracle) tại địa chỉ  
sau đ}y3.  
Để xây dựng một chương trình C/C++ trên Eclipse, chúng ta cần:  
- Eclipse Helios for C/C++ (nếu phiên bản tải về là dành cho Java, ta cần  
phải c{i đặt thêm plugin hỗ trợ); hoặc có thể sử dụng một ấn bản cũ hơn  
của Eclipse như Galileo, Europa….  
- Công cụ biên dịch GCC – MingW.  
- Máy ảo Java JVM.  
Các bước cấu hình trên Eclipse Helios  
Bước 2. Cài MinGW.  
Bước 3. Giải nén Eclipse Helios, sau đó khởi động nó (nhấp vào tập tin  
eclipse.exe). Thông thường, Eclipse sẽ tự động cấu hình MinGW giúp ta. Nếu  
không, hãy thực hiện bước 4.  
Bước 4. Vào menu Project > Properties. Trong hộp thoại xuất hiện, hãy  
chọn C/C++ Build > Settings.  
Hình 3 – Cấu hình MinGW trong Eclipse Helios  
Trong thẻ Tool Settings, ta chọn GCC Assembler > General. Sau đó, nhấp vào  
biểu tượng có dấu cộng mầu xanh. Hộp thoại sau sẽ hiện ra:  
3 http://javadl.sun.com/webapps/download/AutoDL?BundleId=41723  
T r a n g | 12  
Hình 4 – Chọn đường dẫn đến thư mục bin của MinGW  
Ta tiến hành hãy nhập tên đường dẫn đến thư mục bin của MinGW (hoặc  
nhấp v{o nút File system để duyệt đến thư mục này). Mặc định khi c{i đặt,  
thư mục này sẽ là C:\MinGW\bin. Sau đó nhấp Ok. Vậy là công việc cấu hình  
đ~ ho{n tất.  
Xây dựng dự án đầu tiên trên Eclipse  
Cũng giống như CodeBlocks, Eclipse cũng tổ chức chương trình theo dự án.  
Để tạo mới một dự án trong Eclipse, chúng ta có ba cách:  
- Vào File > New > C++ Project.  
- 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  
Ngược lại với Hello World C++  
Project, ta sẽ nhận được một file cpp  
chứa nội dung mà chúng ta sẽ thảo  
luận trong chương tiếp theo.  
Sau đó, hãy nhập vào tên dự án và  
Hình 5 - Tạo mới dự án  
nhấp Next (nếu chưa cấu hình  
MinGW), hoặc nhấp Finish (nếu đ~ hoàn tất việc cấu hình).  
T r a n g | 13  
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.  
src  
cpps  
Chúng ta có thể bổ sung thêm c|c thư mục  
phụ kh|c, nhưng nên tu}n thủ cấu trúc cây  
này (ví dụ khi cần phân biệt các tập tin cpp  
mục cpps, hãy tạo thêm c|c thư mục con  
Main.cpp  
kh|c…)  
Hình 6 - Cấu trúc thư mục của một dự án  
Biên dịch một dự án  
Để biên dịch một dự án, hãy nhấp vào biểu tượng sau đ}y trên thay công cụ  
của Eclipse.  
Hình 7 - Biên dịch một dự án  
Chọn Run As > Local C/C++ Application.  
Một số thủ thuật giúp soạn thảo nhanh  
T r a n g | 14  
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  
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  
T r a n g | 15  
hiện ra, hãy chọn các thuộc tính cần tạo phương thức getter và setter, sau  
đó nhấp Ok.  
Một số phím tắt khác  
Phím tắt  
Ctrl+Space  
Công dụng  
Bật chế độ gợi nhắc lệnh.  
main – Ctrl+Space  
Ctrl+Shift+F  
Ctrl+/  
Khởi tạo nhanh hàm main.  
Định dạng nhanh mã nguồn.  
Comment vùng m~ đ~ được bôi đen, nếu  
vùng bôi đen đ~ ở chế độ comment, thì dấu  
comment sẽ bị hủy bỏ.  
Tab  
Dịch toàn bộ nội dung bị bôi đen sang phải  
một tab.  
Shift+Tab  
Ctrl+1  
Dịch toàn bộ nội dung bị bôi đen sang tr|i  
một tab.  
Chỉnh sửa nhanh toàn bộ các từ giống với  
từ đang được bôi đen. Sau khi chỉnh sửa  
xong, nhấp Enter để kết thúc.  
Ctrl+Shift+\  
Hủy bỏ vùng văn bản bị comment bởi khối  
comment.  
Trên đ}y, tôi đ~ giới thiệu sơ qua hai chương trình soạn thảo miễn phí để  
lập trình C/C++: CodeBlocks và Eclipse. Với CodeBlocks, chỉ cần tải và cài  
đặt. Môi trường hỗ trợ biên dịch GCC đ~ được tích hợp sẵn. Với Eclipse, ta  
phải thực hiện cấu hình để kết hợp với trình biên dịch GCC. Nếu l{ người có  
nhiều trải nghiệm về máy tính, thì nên chọn Eclipse bởi nó l{ chương trình  
soạn thảo rất chuyên nghiệp. Nếu l{ người mới tiếp xúc máy tính, hãy chọn  
CodeBlock vì c{i đặt đơn giản.  
Visual Studio 2010 là một môi trường biên dịch tích hợp của Microsoft. Nó  
là trình biên dịch tốt nhất, hiện đại nhất trên hệ điều hành Windows. Chúng  
ta có thể sử dụng nó để biên dịch C++, C#, Visual Basic, J#... Ta sẽ tìm hiểu  
Visual Studio theo hướng tiếp cận với C++. Một điều cần lưu ý, với phiên  
bản 2010 này, Visual Studio có hai phiên bản dành cho C++: C++ for Net và  
C++ for Win32. Chúng ta chỉ tìm hiểu về tính năng C++ for Win32. Trong nội  
dung của giáo trình này, ta sẽ xây dựng các ứng dụng Console trên nền  
T r a n g | 16  
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.  
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.  
T r a n g | 17  
Mục name: hãy nhập tên dự  
án mà cần tạo.  
Mục Location: nhấp vào nút  
Browse để chọn vị trí lưu  
trữ. Mặc định, Visual Studio  
sẽ lưu trữ dự án ở thư mục  
Documents.  
Mục Solution name: tạo một  
trong thư mục dự án.  
Hộp thoại Hình 12 sẽ hiện ra.  
Hình 11 - Win32 Application Wizard  
Nhóm Application Type  
+ Windows application: tạo ứng dụng winform.  
+ Console application: tạo ứng dụng chạy trên DOS.  
T r a n g | 18  
+ Dll: tạo thư viện dll.  
+ Static library: tạo thư viện tĩnh.  
Nhóm Add common header file  
+ Alt: tạo header từ lớp thư viện Alt.  
+ MFC: tạo header từ lớp thư viện MFC.  
Nhóm Additional options  
+ Empty project: tạo dự án rỗng không có tập tin.  
+ Export symbols: xuất bản các biểu tượng.  
+ Precompiled header: tạo tập tin tiêu đề tiền biên dịch.  
Hãy chọn Console Application và chọn Empty Project. Sau đó, nhấp Finish.  
Tạo các tập tin trong dự án.  
- Nếu tập tin đ~ tồn tại, hãy chọn Add Existing Items. Sau đó, chúng ta duyệt  
đến vị trí tồn tại tập tin.  
- Nếu tập tin chưa tồn tại, hãy chọn Add New Items. Trong cửa sổ xuất hiện,  
tùy thuộc vào tập tin mà chúng ta cần, hãy chọn loại tương ứng. Thông  
thường, trong dự án của C++, chúng ta sử dụng hai tập tin l{ tiêu đề .h và  
th}n chương trình .cpp. Sau đó, h~y nhập tên của tập tin và nhấp Ok. Tệp tin  
tiêu đề .h thường chứa các khai báo prototype của hàm hoặc lớp. Ngoài ra,  
nó có thể chứa các hàm macro, các khai báo hằng và biến toàn cục được sử  
dụng trong toàn bộ chương trình. Tập tin .cpp thường chứa phần thân của  
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.  
T r a n g | 19  
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++  
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  
T r a n g | 20  
Tải về để xem bản đầy đủ
pdf 119 trang yennguyen 25360 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình C++ - Lập trình hướng đối tượng (Phần 1)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_lap_trinh_huong_doi_tuong_phan_1.pdf