Tải bản đầy đủ (.pdf) (872 trang)

BÀI DỊCH “TEACH YOURSELF C++” – THIRD EDITION pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.32 MB, 872 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TPHCM
KHOA: CÔNG NGHỆ THÔNG TIN
LỚP 06C2
******
BÀI DỊCH
“TEACH YOURSELF C++” – THIRD
EDITION
GVHD: Th.s.NGUYỄN TẤN TRẦN MINH KHANG
MÔN : PP LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
NHÓM THỰC HIỆN: 8BIT
1.Trịnh Văn Long 0612229
2.Đoàn Minh Bảo Long 0612231
3.Hà An Phong 0612330
4.Trần Quang long 0612227
5.Nguyễn Thành Long 0612223
6.Nguyễn Văn Năm 0612326
7.Đỗ Trọng Long 0612232
8. Dương Huỳnh nghĩa 0612285
1
LỜI MỞ ĐẦU
***
Được sự giúp đỡ, hướng dẫn của thầy các thành viên của nhóm 8BIT đã cùng
nhau thảo luận,nghiên cứu dịch sách “Teach Yourselt C++, Third Editon” nghĩa
là ”Tự Học C++, ấn bản 3” của tác giả Herbert Schildt. Đây là một cuốn sách rất
hay, dễ hiểu và rất hữu ích cho việc học tập bộ môn này cũng như các bộ môn sau
này . Đặc biệt là những ai mới bước vào con đường trở thành lập trinh viên quốc
tế hay một chuyên viên phần mềm, Phương Pháp Lập Trình Hướng Đối Tượng nó
định hướng cho người lập trình một cách tổng quan về lập trình. Đối với những
sinh viên trong giai đoạn đại cương thì nó đi xuyên suốt bốn năm học.
Các thành viên của nhóm đã cố gắng nhưng cũng không tránh khỏi những sai sót


do thiếu kinh nghiệm dịch sách, mong thầy và quí vị độc giả thông cảm. Để cho
cuốn sách được hoàn thiên rất mong sự góp ý của các độc giả. Nhóm 8BIT xin
chân thành cảm ơn.

Nhóm 8BIT
2
MỤC LỤC
CHƯƠNG 1 6
AN OVERVIEW OF C++ - TỔNG QUAN VỀ C++ 6
1.1. WHAT IS OBJECT-ORIENTED PROGRAMMING ?- LẬP TRÌNH HƯỚNG
ĐỐI TƯỢNG LÀ GÌ ? 10
1.2. TWO VERSIONS OF C++ - HAI PHIÊN BẢN CỦA C++ 18
1.3. C++ CONSOLE I / O - BÀN GIAO TIẾP NHẬP/XUẤT C++ 28
1.4. C++ COMMENTS – LỜI CHÚ GIẢI TRONG C++ 38
1.5. CLASSSES: A FIRST LOOK - LỚP : CÁI NHÌN ĐẦU TIÊN 40
1.6. SOME DIFFERENCE BETWEENCE AND C++ - MỘT SỐ KHÁC BIỆT GIỮA
C VÀ C++ 50
1.7. INTRODUCING FUNCTION OVERLOADING - DẪN NHẬP SỰ NẠP
CHỒNG HÀM: 58
1.8. C++ KEYWORDS – TỪ KHÓA TRONG C++ 66
CHƯƠNG 2 69
Giới Thiệu Lớp (Introducing Classes) 69
2.2. CONSTRUCTORS THAT TAKE PARAMETERS - THAM SỐ CỦA HÀM TẠO
84
2.3. INTRODUCING INHERITANCE - GIỚI THIỆU TÍNH KẾ THỪA: 96
1.4. OBJECT POINTERS - CON TRỎ ĐỐI TƯỢNG: 109
1.6. IN-LINE FUNCTION - HÀM NỘI TUYẾN: 126
1.7. AUTOMATIC IN-LINING - HÀM NỘI TUYẾN TỰ ĐỘNG: 132
CHAPTER 3 141
A CLOSER LOOK AT CLASSES - Xét Kỹ Hơn Về Lớp 141

1.1. Assigning Objects - Gán đối tượng: 143
1.2. PASSING OBJECTS TO FUNCTIONS – Truyền các đối tượng cho hàm: 155
1.3. RETURNING OBJECT FROM FUNCTIONS – Trả về đối tượng cho hàm: 167
CHƯƠNG 4 194
ARRAYS, POITERS, AND REFERENCES - Mảng, con trỏ và tham chiếu 194
1.1. ARRAYS OF OBJECTS - MẢNG CÁC ĐỐI TƯỢNG 197
1.2. USING POINTERS TO OBJECTS – Sử dụng con trỏ đối tượng: 206
1.4. USING NEW AND DELETE - Cách dùng toán tử new và delete: 215
1.5. MORE ABOUT NEW AND DELETE - Mở Rộng của new và delete: 220
1.6. REFERENCES - Tham chiếu: 229
1.7. PASSING REFERENCES TO OBJECTS – Truyền tham chiếu cho đối tượng: 237
1.8. RETURNING REFERENCES - Trả về tham chiếu: 243
1.9. INDEPENDENT REFERENCES AND RESTRICTIONS - THAM CHIẾU ĐỘC
LẬP VÀ NHỮNG HẠN CHẾ : 250
CHAPTER 5 257
FUNCTION OVERLOADING – Nạp chồng hàm 257
5.1. OVERLOADING CONSTRUCTOR FUNCTIONS - QÚA TẢI CÁC HÀM TẠO:
260
5.2. CREATING AND USING A COPY CONSTRUCTOR - TẠO VÀ SỬ DỤNG
HÀM TẠO BẢN SAO: 270
5.3. THE OVERLOAD ANACHRONISM - Sự Lỗi Thời Của Tứ khóa Overload: 288
3
5.4. USING DEFAULT ARGUMENTS - Sử dụng các đối số mặc định: 289
5.5. OVERLOADING AND AMBIGUITY - SỰ QUÁ TẢI VÀ TÍNH KHÔNG XÁC
ĐỊNH: 302
5.6. FINDING THE ADDRESS OF AN OVERLOADED FUNCTION - TÌM ĐỊA
CHỈ CỦA MỘT HÀM QUÁ TẢI: 309
CHƯƠNG 6 320
INTRODUCING OPERATOR OVERLOADING 320
GIỚI THIỆU VỀ NẠP CHỒNG TOÁN TỬ 320

THE BASICS OF OPERATOR OVERLOADING - CƠ SỞ CỦA QUÁ TẢI TOÁN
TỬ 323
OVERLOADING BINARY OPERATORS - QUÁ TẢI TOÁN TỬ NHỊ NGUYÊN.326
OVERLOADING THE RELATIONAL AND LOGICAL OPERATORS - QUÁ TẢI
CÁC TOÁN TỬ QUAN HỆ VÀ LUẬN LÝ 339
OVERLOADING A UNARY OPERATOR - QUÁ TẢI TOÁN TỬ ĐƠN NGUYÊN
343
6.5. USING FRIEND OPERATOR FUNCTION - SỬ DỤNG HÀM TOÁN TỬ
FRIEND 350
6.6. A CLOSER LOOK AT THE ASSIGNMENT OPERATOR - Một Cái Nhìn Về
Toán Tử Gán 362
6.7. OVERLOADING THE [ ] SUBSCRIPT OPERATOR - QUÁ TẢI CỦA TOÁN
TỬ [ ] CHỈ SỐ DƯỚI 368
CHƯƠNG 7 384
INHERITANCE - TÍNH KẾ THỪA 384
1.1. BASE CLASS ACCESS CONTROL – ĐIỀU KHIỂN TRUY CẬP LỚP CƠ SỞ
390
1.2. USING PROTECTED MEMBERS - SỬ DỤNG CÁC THÀNH VIÊN ĐƯỢC
BẢO VỆ 404
1.3. CONSTRUCTORS, DESTRUCTORS, AND INHERITANCE - HÀM TẠO,
HÀM HỦY VÀ TÍNH KẾ THỪA 413
1.4. MULTIPLE INHERITANCE - TÍNH ĐA KẾ THỪA 432
1.5. VIRTUAL BASE CLASSES - CÁC LỚP CƠ SỞ ẢO 448
CHƯƠNG 8 468
INTRODUCING THE C++ I/O SYSTEM - DẪN NHẬP HỆ THỐNG NHẬP/XUẤT
C++ 468
1.1. SOME C++ I/O BASICS - Cơ sở Nhập/Xuất C++ 474
1.2. FORMATTED I/O - Nhập/Xuất Có Định Dạng 478
1.3. USING WIDTH( ), PRECISION( ), AND FILL( ) – SỬ DỤNG HÀM WIDTH(),
PRECISION( ), VÀ FILL( ): 493

1.4. USING I/O MANIPULATORS – SỬ DỤNG BỘ THAO TÁC NHẬP XUẤT 499
1.5. CREATING YOUR OWN INSERTERS – TẠO BỘ CHÈN VÀO: 506
1.6. CREATING EXTRACTORS – TẠO BỘ CHIẾT: 517
CHAPTER 9 526
ADVANCE C++ I/O – NHẬP XUẤT NÂNG CAO CỦA C++ 526
9.1. CREATING YOUR OWN MANIPULATORS – TẠO CÁC THAO TÁC RIÊNG
529
9.2. FILE I/O BASICS – NHẬP XUẤT FILE CƠ BẢN 536
4
9.3. UNFORMATTED, BINARY I/O - NHẬP XUẤT NHỊ PHÂN KHÔNG ĐỊNH
DẠNG 548
9.4. MORE UNFORMATTED I/O FUNCTIONS - THÊM MỘT SỐ HÀM
NHẬP/XUẤT KHÔNG ĐƯỢC ĐịNH DẠNG 559
9.5. RANDOM ACCESS - TRUY XUẤT NGẪU NHIÊN 566
9.6. CHECKING THE I/O STATUS - KIỂM TRA TRẠNG THÁI I/O 572
9.7. CUSTOMIZED I/O AND FILES - FILE VÀ I/O THEO YÊU CẦU 578
CHAPTER 10 585
VIRTUAL FUNCTIONS - HÀM ẢO 585
10.2. INTRODUCTION TO VIRTUAL FUNCTIONS – TỔNG QUAN VỀ HÀM ẢO
591
10.3. MORE ABOUT VIRTUAL FUNCTIONS - NÓI THÊM VỀ HÀM ẢO 605
10.4. APPLYING POLYMORPHISM - ÁP DỤNG ĐA HÌNH 612
CHAPTER 11 628
TEMPLATES AND EXCEPTION HANDLING - NHỮNG BIỂU MẪU VÀ TRÌNH
ĐIỀU KHIỂN BIỆT LỆ 628
11.1. GENERIC FUNCTIONS – NHỮNG HÀM TỔNG QUÁT 630
11.2. GENERIC CLASSES – LỚP TỔNG QUÁT 641
11.3. EXCEPTION HANDLING- ĐIỀU KHIỂN NGOẠI LỆ 653
11.4. MORE ABOUT EXCEPTION HANDLING - TRÌNH BÀY THÊM VỀ ĐIỀU
KHIỂN NGOẠI LỆ 665

11.5. HANDLING EXCEPTIONS THROWN - SỬ DỤNG NHỮNG NGOẠI LỆ
ĐƯỢC NÉM 679
CHAPTER 12 689
RUN-TIME TYPE IDENTIFICATION AND THE CASTING OPERATORS –
KIỂU THỜI GIAN THỰC VÀ TOÁN TỬ ÉP KHUÔN 689
13.1. UDERSTANDING RUN-TIME TYPE IDENTIFICATION (RTTI) - TÌM HIỂU
VỀ SỰ NHẬN DẠNG THỜI GIAN THỰC 692
1.2. USING DYNAMIC_CAST – SỬ DỤNG DYNAMIC_CAST 714
1.3. USING CONST_CAST, REINTERPRET_CAST, AND STATIC_CAST - CÁCH
DÙNG CONST_CAST, REINTEPRET_CAST VÀ STATIC_CAST 727
CHAPTER 13 737
NAMESPACES, CONVERSION FUNCTIONS, AND MISCELLANEOUS TOPICS
- NAMESPACES, CÁC HÀM CHUYỂN ĐỔI VÀ CÁC CHỦ ĐỀ KHÁC NHAU.737
13.1. NAMESPACES 739
13.2. CREATING A CONVERSION FUNCTION – TẠO MỘT HÀM CHUYỂN ĐỔI
756
13.3. STATIC CLASS AND MEMBERS – LỚP TĨNH VÀ CÁC THÀNH PHẦN 762
13.4. CONST MEMBER FUNCTIONS AND MUTABLE - HÀM THÀNH PHẦN
KHÔNG ĐỔI VÀ CÓ THỂ THAY ĐỔI 773
13.5. A FINAL LOOK AT CONSTRUCTORS - CÁI NHÌN CUỐI CÙNG VỀ HÀM
779
13.6. USING LINKAGE SPECIFIERS AND THE ASM KEYWORD 786
13.7. ARRAY-BASE I/O – MẢNG – CƠ SỞ NHẬP/XUẤT 791
CHAPTER 14 800
INTRODUCING THE STANDARD TEMPLATE LIBRARY – GIỚI THIỆU VỀ
5
THƯ VIỆN GIAO DIỆN CHUẨN 800
14.1. AN OVERVIEW OF THE STANDARD TEMPLATE LIBRARY – TỔNG
QUAN VỀ THƯ VIỆN GIAO DIỆN CHUẨN 804
THE CONTAINER CLASSES – LỚP CONTAINER 809

14.3.VECTORS 811
LISTS - DANH SÁCH 823
14.4.MAPS - BẢN ĐỒ: 836
14.5.ALGORITHMS - Những thuật giải 846
14.6.THE STRING CLASS - Lớp Chuỗi 857
CHƯƠNG 1
AN OVERVIEW OF C++ - TỔNG QUAN VỀ
C++
Chapter object :
1.1. WHAT IS OBJECT-ORIENTED PROGRAMMING ?.
Lập Trình Hướng Đối Tượng Là Gì ?
1.2. TWO VERSIONS OF C++.
Hai Phiên Bản C++
1.3. C++ COMMENTS I/O
Nhập / Xuất C++
1.4. C++ COMMENTS.
Lời Nhận Xét C++
1.5. CLASSES: A FIRST LOOK.
6
LỚP : Cái Nhìn Đầu Tiên.
1.6. SOME DIFFERENCE BETWEEN C AND C++.
Một Số Khác Biệt Giữa C và C++.
1.7. INTRODUCING FUNCTION OVERLOADING.
Dẫn Nhập Sự Quá Tải Hàm.
1.8. C++ KEYWORDS SHILLS CHECK.
Các Từ Khóa Trong C++.
C++ is an enhanced version of C language. C++ includes everything that
is part of C and adds support for object-oriented programming (OOP for
short). In addition to, C++ contains many improvements and features that
simply make it a “better C”, independent of object-oriented programming.

With very few, very minor exceptions, C++ is a superset of C. While
everything that you know about the C language is fully applicable to C++,
understanding its enhanced features will still require a significant
investment of time and effort on your part. However, the rewards of
programming in C++ will more than justify the effort you put forth.
C++ là một phiên bản của ngôn ngữ C. C++ bao gồm những phần có trong C
và thêm vào đó là sự hỗ trợ cho Lập trình hướng đối tượng (viết tắt là OOP).
Cộng thêm vào đó, C++ còn chứa những cải tiến và những cải tiến mà đơn
giản nhưng đã tạo ra một “phiên bản C tốt hơn”, không phụ thuộc vào phương
pháp lập trình hướng đối tượng. Với rất ít riêng biệt, C++ có thể xem là tập
cha của C. Trong khi những gì bạn biết về C thì hoàn toàn có thể thực hiện
trong C++, thì việc hiểu rõ những tính năng của C++ cũng đòi hỏi một sự đầu
tư thích đáng về thời gian cũng như nỗ lực của chính bản thân bạn. Tuy nhiên,
phần thưởng cho việc lập trình bằng C++ là sẽ ngày càng chứng minh được
năng lực của bản thân bạn hơn với những gì bạn đã thể hiện.
The purpose of this chapter is to introduce you to several of the most
important features of C++. As you know, the emplements of a computer
language do not exist in a void, separate from one another. Instead, they
work together to form the complete language. This interrelatedness is
especially pronounced in C++. In fact, it is difficult to discuss one aspect of
7
C++ in isolation because the features of C++ are highly integrated. To help
overcome this problem, this chapter provides a brief overview of several
C++ features. This overview will enable you to understand the examples
discussed later in this book. Keep in mind that most topics will be more
thoroughly explored in later chapters.
Mục tiêu của chương này là giới thiệu cho bạn 1 số tính năng quan trọng nhất
của C++. Như bạn biết đó, những thành phần của ngôn ngữ máy tính thì
không cùng tồn tại trong 1 khoảng không, mà tách biệt với những cái khác,
thay vì làm việc cùng nhau để tạo thành một ngôn ngữ hoàn chỉnh. Mối tương

quan này được đặc biệt phát biểu trong C++. Sự thật là rất khó để thảo luận về
một diện mạo của C++ trong sự cô lập bởi vì những tính năng của C++ đã
được tích hợp cao độ. Để giúp vượt qua vấn đề này, chương này cung cấp một
cái nhìn ngắn gọn về một số tính năng của C++. Cái nhìn tổng quan này sẽ
giúp bạn hiểu hơn về những thí dụ mà chúng ta sẽ thảo luận ở phần sau cuốn
sách. Hãy ghi nhớ tất cả những đề mục chúng sẽ giúp bạn hiểu thấu đáo
những chương tiếp theo.
Since C++ was invented to support object-oriented programming this
chapter begins with a decriptions of OOP. As you will see, many features
of C++ are related to OOP in one way or another. In fact, the theory of
OOP permeates C++. However, it is important to understand that C++
can be used to write programs that are and are not object oriented. How
you use C++ is completely up to you.
Vì C++ được thiết kế ra để hỗ trợ cho việc lập trình hướng đối tượng, nên
chương này chúng ta bắt đầu với việc mô tả về lập trình hướng đối tượng
(OOP). Rồi bạn sẽ thấy rằng những tính năng khác của C++ cũng lien quan tới
OOP bằng cách này hay cách khác. Sự thật là lý thuyết về lập trình hướng đối
tượng được trải dàn trong C++. Tuy nhiên, phải hiểu rằng việc dùng C++ để
viết chương trình thì có hoặc không có “hướng đối tượng”. Việc sử dụng C++
như thế nào là hoàn toàn phụ thuộc vào bạn.
At the time of this writing, the standardization of C++ is being finalized.
For this reason, this chapter describes some important differences between
versions of C++ that have been in common use during the past several
years and the new Standard C++. Since this book teaches Standard C++,
this material is especially important if you are using an older compiler.
Vào thời điểm viết cuốn sách này thì việc chuẩn hóa C++ đang được
hoàn tất. Vì lý do đó chương này sẽ mô tả những sự khác biệt quan trọng giữa
hai phiên bản của C++ mà đã từng được dung phổ biến trong những năm
8
trước đây và tiêu chuẩn mới trong C++. Vì cuốn sách này dạy về Tiêu chuẩn

C++, nên tài liệu này sẽ đặc biệt quan trọng nếu bạn sử dụng những trình biên
dịch cũ.
In addition to introducing several important C++ features, this chapter also
discusses some differences between C and C++ programming styles. There
are several aspects of C++ that allow greater flexibility in the way that you
are write programs. While some of these features have little or nothing to do
with object-oriented programming, they are found in most C++ programs,
so it is appropriate to discuss them early in this book.
Thêm vào việc giới thiệu một số tính năng quan trọng trong C++,
chương này cũng thảo luận về những khác biệt giữa hai phong cách lập trình
C và C++. Ở đây có vài yếu tố của C++ cho phép nó có tính linh động hơn
trong việc viết chương trình. Trong khi những yếu tố này thì rất ít hoặc không
có để lập trình hướng đối tượng thì nó được tìm thấy hầu như đầy đủ trong
những chương trình của C++, vì thế sẽ thật thỏa đáng nếu thảo luận về chúng
trong khởi đầu quyển sách này.
Before you begin, a few general comments about the nature and form of
C++ are in order. First, for the most part, C++ programs physically look
like C programs. Like a C program, a C++ program begins execution at
main( ). To include command-line arguments, C++ uses the same argc,
argv convention that C uses. Although C++ defines its own, object-oriented
library, it also supports all the functions in the C standard library. C++
uses the same control structures as C. C++ includes all of the built-in data
types defined by C.
Trước khi bạn bắt đầu, một vài chú giải tổng quát về bản chất và biểu
mẫu sẽ đưa ra trong trình tự. Đầu tiên, dành cho hầu hết các phần, theo cái
nhìn lý tính thì các chương trình C++ trông như các chương trình C. Cũng như
C, một chương trình C++ cũng bắt đầu thi hành bởi hàm main(). Để bao gồm
những đối số bằng cơ chế dòng lệnh (command-line), C++ cũng sử dụng quy
ước argc, argv mà C dùng. Mặc dù C++được định nghĩa với những sở hữu
bản thân, thư viện hướng đối tượng (object-oriented), nó cũng hỗ trợ những

hàm trong thư viện chuẩn của C. C++ sử dụng cấu trúc điều khiển như C. C++
cũng bao gồm nhưng kiểu dữ liệu được xây dựng trong C.
9
This book assumes that you already know the C programming language. In
other words, you must be able to program in C before you can learn to
program in C++ by using this book. If you don’t knowC, a good starting
place is my book Teach Yourseft C, Third Edition (Berkeley:
Osborne/McGraw-Hill, 1997). It applies the same systematic approach used
in this book and thoroughly covers the entires C language.
Quyển sách này xem như bạn đã biết về ngôn ngữ lập trình C. Nói
cách khác bạn phải biết lập trình trong C trước khi bạn học những chương
trình C++ được viết trong cuốn sách này. Nếu bạn chưa biết về C, hãy bắt đầu
với cuốn sách Teach yourseft C, Third Edition (Berkeley: Osborne/McGraw-
Hill, 1997).Việc ứng dụng cách tiếp cận có hệ thống được sử dụng trong cuốn
sách này sẽ bao phủ toàn vẹn ngôn ngữ C.
Note:
This book assumes that you know how to compile and execute a program
using your C++ compiler. If you don’t, you will need to refer to your
compiler’s instructions. (Because of the differences between compilers, it is
impossible to give compolation instructions for each in this book). Since
programming is best learned by doing, you are strongly urged to enter,
compile, and run the examples in the book in the order in which they are
presented.
Chú ý:
Cuốn sách này cho rằng bạn đã biết biên dịch và thực thi một chương trình bằng
trình biên dịch C++. Nếu chưa, bạn sẽ cần nhiều sự hướng dẫn hơn bởi trình biên
dịch của bạn. (Bởi vì những sự khác nhau giữa các trình biên dịch, sẽ là không
khả thi khi đưa ra những sự hướng dẫn về sự biên dịch trong cuốn sách này.) Vì
chương trình là bài học thực hành tốt nhất, nên bạn cần phải mạnh mẽ tiến đến,
biên dịch và chạy thử những ví dụ trong cuốn sách này để biết dược cái gì đang

hiện diện đằng sau những ví dụ ấy.
1.1. WHAT IS OBJECT-ORIENTED PROGRAMMING ?- LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG LÀ GÌ ?
Object-oriented programming is a powerful way to approach the task of
10
programming. Since its early beginnings, programming has been governed by
various methodologies. At each critical point in the evolution of programming, a new
approach was created to help the programmer handle increasingly complex
programs. The first programs were created by toggling switches on the front panel of
the computer. Obviously, this approach is suitable for only the smallest programs.
Next, assembly language was invented, which allowed longer programs to be
written. The next advance happened in the 1950s when the first high-level language
(FORTRAN) was invented.
Lập trình hướng đối tượng là con đường mạnh mẽ để tiếp cận nhiệm vụ lập
trình. Từ buổi bình minh, lập trình đã bị chi phối bởi nhiều phương pháp khác
nhau. Tại mỗi thời điểm cách tân trong sự phát triển của lập trình, một cách tiếp
cận mới lại ra đời với mục đích giúp lập trình viên gia tăng khả năng kiểm soát
hay điều khiển những chương trình mang tính phức tạp. Những chương trình
đầu tiên được tạo ra bởi những công tắc đảo chiều được gắn trên một cái bảng
phía trước máy tính. Hiển nhiên là cách tiếp cận này chỉ đáp ứng được cho
những chương trình nhỏ nhất. Tiếp theo, ngôn ngữ assembly (hay còn gọi là
Hợp ngữ) được ra đời, cho phép viết những chương trình dài hơn. Một ngôn
ngữ cấp cao hơn xuất hiện vào những năm của thập niên 1950 khi đó ngôn ngữ
cấp cao đầu tiên được ra đời (đó là FORTRAN).
By using a high-level language, a programmer was able to write programs
that were several thousands lines long. However,the method of programming
used early on was an ad hoc, anything-goes approach. While this is fine
relatively short programs, it yields unreadable (and unmanageable)
“spaghetti code” when applied to larger programs. The elimination of
spaghetti code became feasible with the invention of structured programming

languages in the 1960s. These languages include Algol and Pascal. In loose
terms, C is a structured language and most likely the type of programming
relies on well-defined control structures, code blocks, the absence (or at least
minimal use) of GOTO, and stand-alone subroutines that support recursion
and local variables. The essence of structured programming is the reduction
of a program into its constituent elements. Using structured programming, the
average programmer can create and maintain programs that are up to 50,000
lines long.
Bằng việc sử dụng ngôn ngữ cấp cao, các lập trình viên đã có thể viết nên
những chương trình có độ dài lên tới vài ngàn dòng. Tuy nhiên, phương pháp
lập trình này cũng chỉ được sử dụng như một thứ tạm thời, không gì tiến triển
được. Trong khi những mối quan hệ giữa các chương trình ngắn khá khả quan
11
thì việc thiết kế lại quá khó (và không kiểm soát được) loại “mã spaghetti” này
khi ứng dụng cho các chương trình cỡ lớn. Cuộc đấu tranh với loại mã spaghetti
này đã tạo đà cho sự phát minh ra cấu trúc của những ngôn ngữ lập trình vào
thập niên 1960. Những ngôn ngữ này là Algol và Pascal. Trong tương lai không
chắc chắn, C là một ngôn ngữ có cấu trúc và gần như là kiểu lập trình mà bạn
bạn đang dung với tên gọi là lập trình có cấu trúc. Lập trình cấu trúc dựa trên
những cấu trúc điều khiển, những khối mã dễ xác định, sự vắng mặt (hay gần
như rất ít sử dụng) của GOTO, và những thủ tục con đứng một mình để hỗ trợ
cho phương pháp đệ quy và những biến cục bộ. Bản chất của lập trình cấu trúc
là sự giảm thiểu những yếu tố cấu thành bản chất bên trong của một chương
trình. Bằng việc sử dụng phương pháp lập trình này, những lập trình viên với
năng lục trung bình cũng có thể tạo ra và bảo trì những chương trình mà có khối
lượng lên tới 50.000 dòng.
Although structured programming has yielded excellent results when applied
to moderately complex programs, even it fails at some point, after a program
reaches a certain size. To allow more complex programs to be written, a new
approach to the job of programming was needed. Towards this end, object-

oriented programming was invented. OOP takes the best of ideas embodied in
structured programming and combines them with powerful new concepts that
allow you to organize your programs more effectively. Object-oriented
programming encourages you to decompose a problem into its constituent
parts. Each component becomes a seft-contained object that contains its own
instructions and data that relate to that object. In this way, complexity is
reduced and the programmer can manage larger programs.
Mặc dù lập trình cấu trúc đã đạt được những kết quả xuất sắc khi ứng dụng vào
những chương trình có độ phức tạp trung bình, thậm chí chỉ trục trắc ở vài chỗ
sau khi một chương trình đã đạt đến một kích thước chắc chắn. Để cho phép
viết được những chương trình phức tạp hơn, một cách tiếp cận mới công việc
lập trình đã được đề ra. Cuối cùng, phương pháp lập trình hướng đối tượng đã
được phát minh. Lập trình hướng đối tượng (OOP) đã cụ thể hóa những ý tưởng
tuyệt vời vào trong cấu trúc lập trình và kết hợp chúng với những khái niệm
chặt chẽ mà cho phép bạn tổ chức những chương trình của mình một cách có
hiệu quả. OOP khuyến khích bạn phân tích một vấn đề nằm trong bản chất của
nó. Mỗi bộ phận đều có thể trở thành một đối tượng độc lập mà chứa đựng
những câu lệnh hay dữ liệu lien quan đến đối tượng đó. Bằng cách này sự phức
tạp sẽ được giảm xuống và lập trình viên có thể quản lý những chương trình cỡ
lớn.
12
All OOP languages, including C++, share three common defining traits:
encapsulation, polymorphism, and inheritance. Let’s look at the three
concepts now.
Tất cả những ngôn ngữ lập trình hướng đối tượng, bao gồm cả C++, đều
mang ba đặc điểm chung sau đây: tính đóng gói, tính đa dạng, và tính kế thừa.
Còn chờ gì nữa phải tìm hiểu các khái niệm trên ngay thôi.
Encapsulation
Encapsulation is the mechanism that binds together code and the data it
manipulates, and keep both safe from outside interference and misuse. In an

object-oriented language, code and data can be combined in such a way that
a seft-contained “black box” is created. When code and data are linked
together in this fashion, an object is created. In other words, an object is the
device that supports encapsulation.
Tính đóng gói hay tích hợp:
Tính đóng gói là việc ràng buộc những đoạn mã và những dữ liệu lại, điều
khiển và giữ chúng an toàn khỏi những ảnh hưởng và những mục đích sai trái.
Trong một ngôn ngữ lập trình hướng đối tượng, mã và dữ liệu có thể được kết
hợp theo cách mà một cái “hộp đen” độc lập được tạo ra. Khi mã và dữ liệu
liên kết với nhau theo kiểu này thì một đối tượng được tạo nên. Nói cách khác,
một đối tượng là sản phẩm của sự đóng gói với nguyên liệu là mã và dữ liệu.
With an object, code, data, or both may be private to that object or public.
Private code or data is known to and accessible only by another part of the
object. That is, private code or data can’t be accessed by a piece of the
program that exists outside the object. When code and data is public, other
parts of your program can access it even though it is defined within an
object. Typically, the public parts of an object are used to provide a
controlled interface to the private elements of the object.
Trong phạm vi của một đối tượng, mã, dữ liệu , hay cả hai có thể là phần
private (phần riêng) của đối tượng hay là public (phần chung). Phần mã và dữ
liệu trong phần private được biết và truy xuất bởi các thành phần khác của đối
13
tượng. Nghĩa là mã và dữ liệu trong phần private không thể được truy xuất bởi
bất kỳ phần nào trong chương trình mà tồn tại bên ngoài đối tượng đó. Khi mã
và dữ liệu là kiểu public thì mọi phần trong chương trình của bạn đều có thể
truy xuất đến nó ngay cả khi nó được định nghĩa bên trong một đối tượng. Đặc
trưng là những phần có kiểu public của một đối tượng thì được sử dụng để
cung cấp một giao diện điều khiển những thành phần kiểu private của một đối
tượng.
For all intents and purposes, an object is variable of a user-defined type. It

may seem strange that an object that links both code and data can be
thought of as a variable. However, in an object-oriented programming, this
is precisely the case. Each time you define a new type of object, you are
creating new data type. Each specific instance of this data type is a
compound variable.
Để phù hợp với nhiều ý định và mục đích, một đối tượng có thể xem là một
biến theo kiểu người dùng tự định nghĩa. Có thể bạn sẽ lấy làm ngạc nhiên khi
một đối tượng có thể liên kết những lệnh(hay mã) và dữ liệu lại mà lại xem
như là một biến. Tuy vậy, trong lập trình hướng đối tượng thì điều đó là hoàn
toàn chính xác. Mỗi khi bạn định nghĩa một loại đối tượng thì bạn đang tạo ra
một kiểu dữ liệu mới. Mỗi một kiểu đối tượng như vậy được coi là một biến
phức hợp (hay biến ghép).
Polymorphism
Polymorphism (from the Greek,meaning “many form”) is the quality that
allows one name to be used for two or more related but technically different
purposes. As it relates to OOP, polymorphism allows one name to specify a
general class of actions. Within a general class of actions, the specific
action are be replied is determined by the type of data. For example, in C,
which does not significantly support polymorphism, the absolute value
action requires three distinct function names: abs( ), labs( ), and fabs( ).
Three functions compute and return the absolute value of an integer, a long
integer, and float-point value, respectively. However, in C++, which
supports polymorphism, each function can be called by the same name,
such as abs( ). (One way this can be accomplished is shown later in the
chapter.) The type of the data used to call the function determines which
14
specific version of the function is actually executed. As you will see, in
C++, it is possible to use ine function name for many different purposes.
This is called function overloading.
Tính đa dạng

Polymorphism (Theo tiếng Hy Lạp có nghĩa là “đa thể” ) hay tính đa dạng là
đặc tính cho phép một tên có thể được sử dụng cho hai hay nhiều họ nhưng
với nhiều mục đích ngữ nghĩa khác nhau. Vì nó liên quan đến OOP, nên tính
đa dạng cho phép một tên để chỉ rõ những hành động chung của một lớp. Bên
trong những hành động chung của một lớp, hành động đặc trưng để ứng dụng
được định nghĩa bởi một kiểu dữ liệu. Ví dụ, trong C, thì tính đa dạng không
được hỗ trợ một cách đáng kể, hành động lấy giá trị tuyệt đối đòi hỏi ba tên
hàm riêng biệt là: abs( ), labs( ), fabs( ). Những hàm này tính toán và trả lại
giá trị tuyệt đối của một số nguyên, một số nguyên dài, và một số thực một
cách riêng biệt. Tuy nhiên, trong C++, được hỗ trợ cho tính đa dạng thì chỉ
cần mỗi hàm abs( ). (Cách này sẽ được nêu đầy đủ trong phần sau của chương
này). Kiểu dữ liệu dùng trong hàm sẽ quyết định việc hàm nào sẽ được gọi
thực thi. Bạn sẽ thấy, trong C++, hoàn toàn có thể sử dụng một tên hàm cho
nhiều mục đích khác nhau. Điều này còn được gọi là sự quá tải hàm (function
overloading).
More generally, the concept of polymorphism is characterized by the idea of
“one interface, multiple methods”, which means using a generic interface
for a group of related activities. The advantage of polymorphism is that it
helps to reduce complexity by allowing one interface to specify a general
class of action. It is the compiler’s job to select the specific action as it
applies to each situation. You, the programmer, don’t need to do this
selection manually. You need only remember and utilize the general
interface. As the example in the preceeding paragraph illustrates, having
three names for the absolute value function instead of just one makes the
general activity of obtaining the absolute value of a number more complex
than it actually is.
Tổng quát hơn, khái niệm tính đa dạng được đặc trưng bởi ý tưởng “ một
giao diện nhưng nhiều cách thức ”, điều này có nghĩa là sử dụng một giao diện
chung cho một nhóm những hành động có liên quan. Sự thuận lợi của tính đa
dạng là giúp giảm bớt sự phức tạp bằng cách cho phép một giao diện để chỉ rõ

hành động của một lớp tổng quát. Đó là cách mà trình biên dịch chọn hành
động đặc trưng để thi hành trong từng tình huống cụ thể. Bạn, một người lập
trình, không cần phải làm công việc này một cách thủ công. Bạn cần nhớ và
15
tận dụng cái giao diện chung. Như thí dụ minh họa trong đoạn văn trước, cần
đến ba tên hàm để lấy giá trị tuyệt đối thay vì chỉ cần một tên nhưng chỉ hành
động chung là tính giá trị tuyệt đối của một số mà thật sự phức tạp.
Polymorphism can be applied to operators, too. Virtually all programming
languages contain a limited application of polymorphism as it relates to the
arithmetic operators. For example, in C++, the + sign is used to add
integers, long intefer, characters, and floating-point values. In these cases,
the compiler automatically knows which type of arithmetic to apply. In
C++, you can extend this concept to other types of data that you define.
This type of polymorphism is called operator overloading.
Tính đa dạng cũng có thể sử dụng cho các toán tử. Hầu như mọi ngôn ngữ lập
trình đều có một sự giới hạn tính đa dạng đối với các toán tử số học. Ví dụ,
trong C, dấu + được dung để cộng các giá trị số nguyên, số nguyên dài, ký tự
và số thực. Trong những trường hợp này, trình biên dịch tự động hiểu loại số
học nào sẽ được áp dụng. Trong C++, bạn có thể mở rộng khái niệm này đối
với những kiểu dữ liệu khác mà bạn định nghĩa. Loại đa dạng này được gọi là
sử quá tải các toán tử (operator overloading).
The key point to remember about polymorphism is that it allows you to
handle greater complexity by allowing the creation of stamdard interfaces
to related activities.
Điểm mấu chốt của vấn đề cần nhớ là tính đa dạng cho phép bạn kiểm soát
với độ phức tạp rất cao bằng cách cho phép tạo ra một giao diện tiêu chuẩn
cho các hành động có liên quan.
Inheritance
Inheritance is the process by which one object can be acquire the properties
of another. More specifically, an object can inherit a general set of

properties to which it can add those features that are specific only to itself.
Inheritance is important because it allows an object to support the concept
of hierarchical classification. Most information is made manageable by
hierarchical classification. For example, think about the description of a
house. A house is part of the general called building. In turn, building is
16
part of the more general class structure, which is part of the even more
general of objects that we call man-made. In each case, the child class
inherits all those qualities associated with the parent and adds to them its
own defining characteristics. However, through inheritance, it is possible to
describe an object by stating what general class (or classes) it belongs to
along with those specific traits that make it unique. As you will see,
inheritace plays a very important role in OOP.
Tính kế thừa
Tính kế thừa là một quá trình mà một đối tượng có thể sử dụng các đặc tính
của một đối tượng khác. Cụ thể hơn, một đối tượng có thể thừa hưởng những
đặc tính chung của đối tượng khác để thêm các tính năng khác này vào như
một phần của chính bản thân nó. Sự thừa hưởng rất quan trọng bởi vì nó cho
phép một đối tượng chấp nhận khái niệm sự phân loại có tôn ti (hierachial
classification). Hầu hết các thông tin được tạo ra được quản lý bởi sự sự phân
loại có trật tự này. Ví dụ, hãy nghĩ về một ngôi nhà. Một ngôi nhà là một phần
của một lớp tổng quát gọi là công trình. Cứ như vậy, công trình lại là một
phần của một lớp chung gọi là kiến trúc, và kiến trúc lại là thành phần của
một lớp mà ta gọi là những vật phẩm nhân tạo. Trong mỗi trường hợp, lớp
con thừa hưởng tất cả những tính chất được liên đới với lớp cha và cộng thêm
với những tính chất được định nghĩa bên trong chúng. Nếu không sử dụng sự
phân loại có trật tự thì mỗi đối tượng sẽ phải định nghĩa tất cả những đặc tính
mà rõ ràng liên quan đến nó. Tuy nhiên, qua sự kế thừa, ta có thể mô tả một
đối tượng bằng cách phát biểu những đặc điểm nổi bật thuộc về một lớp tổng
quát (hay một họ các lớp) mà tạo nên tính độc nhất của chúng. Bạn sẽ thấy

rằng sự thừa hưởng chiếm một vai trò rất quan trọng trong OOP.
CÁC VÍ DỤ :
1.Sự đóng gói không phải là điều gì hoàn toàn mới mẻ trong OOP. Theo một góc
độ thì sự đóng gói có thể là một thành tựu khi sử dụng ngôn ngữ C. Ví dụ, khi bạn
sử dụng một hàm của thư viện thì thật ra bạn đang sử dụng thủ tục cái “hộp đen”,
những gì bên trong bạn đâu thể gây ảnh hưởng hay tác động vào chúng (trừ phi,
có lẽ là chỉ “bó tay” với những hành động cố tình phá hoại). Hãy xem xét hàm
fopen( ), khi dùng để mở một file, thì vài biến nội bộ sẽ được khởi tạo và gán giá
trị. Càng xa khỏi vùng chương trình liên quan thì càng bị ẩn và khó truy cập. Tuy
nhiên, C++ vẫn cung cấp cho bạn nhiều cách tiếp cận sự đóng gói này an toàn
hơn.
2.Trong thế giới thực, những ví dụ về sự đa dạng thì khá là chung chung. Ví dụ,
hãy xem xét cái vô-lăng lái xe của bạn. Nó làm việc cũng giống như chiếc xe bạn
sử dụng thiết bị lái năng lượng, thiết bị lái bằng thanh răng, hay tiêu chuẩn, thiết
17
bị lái thủ công. Vấn đề là cái bề ngoài hình dáng không quan trọng mà là cái cách
các động cơ bánh răng hoạt động (hay cái phương thức).
3.Sự thừa kế các đặc tính và khái niệm tổng quát hơn về lớp là nền tảng để hiểu
cách tổ chức. Ví dụ, rau cần tây là một loại(hay thành viên) của lớp rau quả, rau
quả lại là một thành phần của lớp cây trồng. Lần lượt như vậy, cây trồng là những
sinh vật sống, và cứ thế. Nếu không có sự sự phân loại trong tôn ti thì hệ thống hệ
thống kiến thức sẽ không khả thi.
BÀI TẬP:
Hãy nghĩ về vai trò của sự phân loại và tính đa dạng trong cuộc sống hằng
ngày của chúng ta.
1.2. TWO VERSIONS OF C++ - HAI PHIÊN BẢN CỦA C++
At the time of this writing, C++ is in the midst of a transformation. As
explained in the preface to this book, C++ has been undergoing the process
of standardization for the past several years. The goal has been to create a
stable, standardized, featured-rich language, that will suit the needs of

programmers well into the next century. As a result, there are really two
versions of C++. The first is the traditional version that is based upon
Bjarne Stroustrup’s original designs. This is the version of C++ that has
been used by programmers for the past decade. The second is the new
Standard C++, which was created by Stroustrup and the ANSI/ISO
standardization committee. While these two versions of C++ are very
similar at there core, Standard C++ contains several enhancements not
found in traditional C++. Thus, Standard C++ is essentially a superset of
traditional C++.
Vào thời điểm viết cuốn sách này, C++ là cái chuyển giao của một sự thay
đổi. Như đã nói trong phần mở đầu của cuốn sách, C++ phải trải qua một quá
trình chuẩn hóa trong vài năm trước đây. Mục tiêu là tạo ra sự ổn định, được
chuẩn hóa, một ngôn ngữ giàu tính năng để phục vụ tốt cho các lập trình viên
trong thế kỷ tiếp theo. Kết quả là đã tạo ra hai phiên bản C++. Cái đầu tiên là
phiên bản truyền thống mà dựa trên nguồn gốc bản phác thảo của Bjarne
Stroustrup. Đây là phiên bản C++ được các lập trình viên sử dụng trong thập
niên trước đây. Cái thứ hai là “new Standard C++”, được tạo ra bởi Stroustrup
và ủy ban tiêu chuẩn ANSI/ISO. Trong khi hai phiên bản C++ có hạt nhân khá
là giống nhau thì Standard C++(hay C++ chuẩn) chứa vài sự nổi bật mà không
18
tìm thấy được trong phiên bản C++ truyền thống. Vì vậy, C++ chuẩn một cách
đặc biệt là một tập cha của bản C++ truyền thống.
This book teaches Standard C++. This is the version of C++ defined by the
ANSI/ISO standardization committee, and it is the version implemented by
all modern C++ compilers. The code in this book reflects the contemporary
coding style and practices as encouraged by Standard C++. This means
that what you learn in this book will be applicable today as well as
tomorrow. Put directly, Standard C++ is the future. And, since Standard
C++ encompasses all features found in earlier versions of C++, what you
learn in this book will enable you work in all C++ programming

environments.
Cuốn sách này viết về C++ chuẩn. Phiên bản này được định nghĩa bởi ủy ban
tiêu chuẩn ANSI/ISO, và nó là công cụ của tất cả các trình biên dịch C++ hiện
nay. Những đoạn mã viết trong cuốn sách này tương ứng với phong cách viết
mã đương thời và những bài thực hành theo bản C++ chuẩn. Điều này có
nghĩa là những gì bạn học trong cuốn sách này thì đều sự dụng được hiện nay
cũng như tương lai. Nói trực tiếp là C++ chuẩn chính là tương lai. Và, vì C++
đã hoàn thiện tất cả các tính năng có trong các bản C++ trước nên tất cả những
gì bạn học đều có thể làm việc trong tất cả các môi trường lập trình C++.
However, if you are using an older compiler, it might not accept all the
programs in this book. Here’s why: During the process of standardization,
the ANSI/ISO committee added many new features to the language. As these
features were defined, they were implemented by the compiler developers.
Of course, there is always a lag time between the addition of a new feature
to the language and the availability of the features in commercial
compilers. Since features were added to C++ over a period of years, an
older compiler might not support one or more of them. This important
because two recent additions to the C++ language affect every program
that you will write-even the simplest. If you are using an oder compiler that
does not accept these new features, don’t worry. There is an easy
workaround, which is described in the following paragraphs.
Tuy nhiên, nếu bạn sử dụng một trình biên dịch quá cũ, thì có khả năng nó sẽ
không chấp nhận những đoạn mã viết trong cuốn sách này. Đây cũng là
nguyên nhân mà trong suốt quá trình chuẩn hóa, ủy ban tiêu chuẩn ANSI/ISO
đã tăng thêm nhiều tính năng mới cho ngôn ngữ này. Khi những tính năng này
được định nghĩa thì chúng cũng được các nhà phát triển trình biên dịch bổ
19
sung. Tất nhiên đây luôn là một khoảng thời gian chậm chạp giữa việc thêm
tính năng vào một ngôn ngữ và việc biến nó khả thi trong các trình biên dịch.
Những tính năng này đã được thêm vào trong một thời kỳ nhiều năm nên

những trình biên dịch đời cũ thì không được hỗ trợ để biên dịch chúng. Và
quan trọng hơn là hai sự bổ sung gần đây vào ngôn ngữ C++ sẽ ảnh hưởng
đến mỗi chương trình mà bạn sẽ viết, thậm chí dù là chương trình đơn giản
nhất. Nếu bạn sử dụng trình biên dịch cũ hơn thì nó sẽ không chấp nhận
những tính năng mới này, nhưng đừng quá lo lắng. Có một cách giải quyết dễ
dàng sẽ được mô tả trong những đoạn tiếp theo.
The differences between old-style and modern code involve two new
features: new-style headers and the namespace statement. To demonstrate
these deffirences we will begin by looking at two versions of a minimal, do-
nothing C++ program. The first version, shown here, reflects theway C++
programs were written until recently. (That is, it uses old-style coding.)
Sự khác biệt giữa phong cách viết mã cũ và hiện đại liên quan đến hai tính
năng sau: những kiểu khai báo mới và sự giới thiệu không gian tên
(namespace). Để chứng minh những sự khác biệt này chúng tôi sẽ bắt đầu
bằng việc nhìn lại hai bản C++ ở một khía cạnh nhỏ, không đụng đến chương
trình C++. Trong bản đầu tiên, hãy xem sau đây, phản ánh cách những chương
trình C++ được viết trong thời gian gần đây. (Đó là viết mã theo phong cách
cũ.)
/*
Những chương trình với phong cách C++ truyền thống
/*
#include <iostream.h>
int main()
{
/* vùng mã chương trình */
return 0;
}
20
Since C++ is built on C, this skeleton should be largely familiar, but pay
special attention to the #include statement. This statement includes the file

iostream.h, which provides support for C++’s I/O system. (It is to C++
what stdio.h is to C.)
Here is the second version of the skeleton, which uses the modern style:
Vì C++ được xây dựng dựa trên C, nên cái khung rất quen thuộc nhưng hãy
chú ý đến dòng phát biểu #include. Lời phát biểu này khai báo file
iostream.h mà được cung cấp cho hệ thống nhập xuất của C++ (trong C là
stdio.h).
Sau đây là bản thứ hai của cái khung này, sử dụng phong cách hiện đại:
/*
Phong cách lập trình C++ hiện đại là sử dụng
lời khai báo theo phong cách mới và vùng không
gian tên
*/
#include <iostream>
using namespace std;
int main()
{
/* vùng mã chương trình */
return 0;
}
Notice the two lines in this program immediately after the first comment;
this is where the changes occur. First, in the #include statement, there is no
.h after the name iostream. And second, the next line, specifying a
namespace, in new. Although both the new-style headers and namespaces
will be examined in detail later in this book, a brief overview is in order
now.
21
Chú ý hai dòng trong chương trình này ngay lập tức sau khi đọc xong lời
nhận xét đầu tiên; ở đây có sự thay đổi. Đầy tiên, trong lời phát biểu #include
không có .h theo sau tên iostream. Và cái thứ hai là dòng tiếp theo, chỉ rõ

vùng không gian tên, đây là nét mới. Mặc dù cả hai cái này sẽ được kiểm
nghiệm chi tiết trong các phần sau của cuốn sách nhưng chúng ta hãy xem xét
ngắn gọn chúng.
The new C++ headers
As you know from your C programming experience, when you use a library
function in a program, you must include its header file.This is done using
the #include statement. For example, in C, to include the header file for the
I/O functions, you include stdio.h with a statement like this.
Những đầu mục mới của C++
Như bạn biết từ những kinh nghiệm lập trình bằng C++, khi bạn sử dụng một
hàm thư viện trong một chương trình, bạn phải bao hàm lời khai báo file. Cái
này dùng cách phát biểu #include. Ví dụ, trong C, để khai báo sử dụng file
cho hàm I/O (hàm nhập xuất), bạn sử dụng stdio.h với lời phát biểu như sau:
#include <stdio.h>
Here stdio.h is the name of the file used by the I/O functions, and the
preceding statement causes that file to be included in your program. The
key point is that the #include statement includes a file.
Ở đây, stdio.h là tên file được sử dụng bởi hàm nhập xuất, và việc lời
phát biểu này đi trước đã làm cho file đó được bao hàm trong chương trình
của bạn. Điểm mấu chốt là #include phát biểu việc includes a file (bao hàm
một file).
When C++ was first invented and for several years after that,it used the
same style of headers ad did C. In fact, Standard C++ still supports C-style
headers for header files that you create and for backward compatibility.
However, Standard C++ has introduced a new kind of header that is used
by the Standard C++ library. The new-style headers do not specify
filenames. Instead, they simply specify standard identifiers that might be
mapped to files by the compiler, but they need not be. The new-style C++
22
headers are abstractions that simply guarantee that the appropriate

prototypes and definitions required by the C++ library have been declared.
Khi C++ lần đầu tiên được tạo ra và vài năm sau đó, nó đã sử dụng
những kiểu khai báo của C. Thật ra, C++ chuẩn vẫn còn hỗ trợ những khai báo
kiểu C cho những file khai báo mà bạn tạo ra và cho sự tương thích ngược.
Tuy nhiên, C++ chuẩn đã giới thiệu một kiểu khai báo mới mà được sử dụng
trong thư viện C++ chuẩn. Kiểu khai báo mới này không chỉ rõ tên những file.
Thay vì đơn giản chỉ rõ những định dạng tiêu chuẩn mà chúng được ánh xạ
vào các file bởi trình biên dịch nhưng chúng không cần. Kiểu khai báo mới
này của C++ là những sự trừu tượng hóa như sự đảm bảo đơn thuần, những
vật mẫu hay những định nghĩa thích đáng được yêu cầu bởi thư viện C++.
Since the new-style header is not a filename, it does not have a .h extension.
Such a header consist solely of the header name contained between angle
brackets supported by Standard C++.
Vì khai báo mới không phải là một tên file nên đuôi .h không cần thiết. Một
khai báo gồm có một tên khai báo đơn độc trong dấu ngoặc < >.
Ví dụ, sau đây là vài kiểu khai báo được chấp nhận trong C++ chuẩn:
<iostream>
<fstream>
<vector>
<string>
The new-style headers are included using the #include statement. The only
difference is that the new-style headers do not necessarily represent filenames.
Những đầu mục kiểu mới này bao gồm việc sử dụng sự trình bày #include. Sự khác
nhau duy nhất là những đầu mục kiểu mới không tất yếu đại diện cho tên file.
Becase C++ includes th entire C function library, it still supports the standard
C-style header files associated with that library. That is, header files such as
stdio.h and ctype.h are still available. However, Standard C++ also defines new-
style headers you can use in place of these header files. The C++ versions of the
standard C headers simply add c prefix to the filename and drop the .h. For
example, the new-style C++ header for math.h is <cmath>, and the one for

23
string.h is <cstring>. Although it is currently permissible to include a C-tyle
header file when using C library functions, this approach is deprecate by
Standart C++.(That is, it is not recommended.) For this reason, this book will
use new-style C++ header in all #include statements. If your compiler does not
support new-style headers for the C function library, simply substitute the old-
style, C-like headers.
Bởi vì C++ bao gồm toàn bộ thư viện chức năng C, nó vẫn còn hỗ trợ C tiêu chuẩn-
những hồ sơ đầu mục kiểu liên quan đến thư viện kia. Điều đó, đầu mục sắp xếp
như stdio.h và ctype.h thì vẫn còn sẵn có. Tuy nhiên, C++ tiêu chuẩn cũng định
nghĩa những đầu mục kiểu mới bạn có thể sử dụng thay cho những hồ sơ đầu mục
này. Những phiên bản C++ của những đầu mục C tiêu chuẩn đơn giản thêm tiền tố
c vào đầu tên file và kết thúc bằng .h .Chẳng hạn, đầu mục C++ kiểu mới cho
math.h là <cmath>, và cho string.h là < cstring>. Dù hiện thời thừa nhận bao
gồm một hồ sơ đầu mục tyle C khi sử dụng những hàm thư viện C, phương pháp
này bị phản đối bởi C++ chuẩn.(Nghĩa là, nó không được khuyến cáo.). Với lý do
này, sách này sẽ sử dụng đầu mục C++ kiểu mới trong tất cả các câu lệnh. Nếu trình
biên dịch (của) các bạn không hỗ trợ những đầu mục kiểu mới cho thư viện chức
năng C, đơn giản thế những đầu mục cũ, giống như C.
Since the new-style header is a recent addition to C++, you will still find many,
many older programs that don’t use it. These programs instead use C-tyle
headers, in which a filename is specified. As the old-style skeletal program
shows, the traditional way to include the I/O header is as shown here:
Đầu mục kiểu mới là một sự bổ sung cho C++, bạn sẽ vẫn còn tìm thấy gần đây
nhiều chương trình cũ không sử dụng nó. Những chương trình này thay vào đó sử
dụng C- những đầu mục tyle, trong đó một tên file được chỉ rõ. Như chương trình
lệnh điều khiển kiểu cũ hiện ra, cách truyền thống để bao gồm đầu mục vào/ra được
cho thấy như ở đây:
#include < iostream.h >
This cause the file iostream.h to be include in your program. In general, an old-

style header will use the same name as its corresponding new-style header with a
.h appended.
Đây là căn nguyên tập tin iostream.h được bao gồm trong chương trình của các
bạn. Nói chung, một đầu mục kiểu cũ sẽ sử dụng cùng tên với đầu mục kiểu mới
tương ứng với nó với .h được nối vào.
As of this writing, all C++ compilers support the old-style headers. However, the
24
old style headers have been declared obsolete, and their use in new programs is
not recommended. This is why they are not used in this book.
Kể từ sự ghi này, tất cả các trình biên dịch C++ hỗ trợ những đầu mục kiểu cũ. Tuy
nhiên, những đầu mục kiểu cũ được khai báo đã lỗi thời, và sự sử dụng chúng trong
những chương trình mới không được khuyến cáo. Điều này là lý do tại sao chúng
không được sử dụng trong sách này.
Remember: While still common in existing C++ code, old-style headers are
obsolete.
Ghi Nhớ : Trong mã C++ phổ biến hiện hữu, những đầu mục kiểu cũ là lỗi thời.
NAMESPACES
When you include a new-style header in your program, the contents of that
header are contained in the std namespace. A namespace is simply a declarative
region. The purpose of a namespace is to localize the names of library functions
and other such items were simply placed into the global namespace(as they are
in C). However, the contents of new-style headers are placed in the std
namespace. We will look closely at namespace later in this book. For now, you
don’t need to worry about them because you can use the statement.
Khi bạn bao gồm một đầu mục kiểu mới trong chương trình của các bạn, nội dung
của đầu mục kia được chứa đựng trong namespace std . Một namespace đơn giản là
một vùng tường thuật. Mục đích của một namespace là sẽ địa phương hóa tên của
những hàm thư viện và những thư mục như vậy khác thì đơn giản được đặt vào
trong toàn cục namespace (giống như trong C). Tuy nhiên, nội dung của những đầu
mục kiểu mới được đặt trong namespace std. Chúng tôi sẽ có cái nhìn rõ ràng hơn

về namespace trong cuốn sách này ở phần sau. Bây giờ, bạn không cần lo lắng họ
bởi vì bạn có thể sử dụng câu lệnh
using namespace std;
to bring the std namespace into visibility (i.e., to put std into the global
namespace). After this statement has been complied, there is no difference
between working with an old-style header and a new-style one.
để mang đến sự rõ ràng cho namespace std ( thí dụ, std được đặt vào trong
namespace toàn cục). Sau khi câu lệnh này được tuân theo, không có sự khác nhau
25

×