Bằng cách kết hợp một cú pháp hiệu quả với kiểu style lập trình tốt bạn có thể tạo những chơng trình mạnh thực hện các phép toán phức tạp... Để lập trình với các máy tính cổ này, các kỹ
Trang 1Chơng 1
Giới thiệu về ngôn ngữ C++
Khả năng tổ chức và xử lý thông tin là yếu tố chính dẫn đến thành công trong thời đại hiện nay Các máy tính đợc thiết kế để kết nối và xử lý một lợng lớn các thông tin nhanh và hiệu quả Tuy nhiên chúng không thể làm đợc bất
cứ việc gì khi mà một ngời nào đó cha nói với chúng những gì phải làm Những công việc mà ngời ta yêu cầu phải thực hiện, thì đó chính là những cái
mà C++ có thể làm C++ là một ngôn ngữ lập trình bậc cao, nó cho phép những kỹ s phần mềm trao đổi thông tin một cách hiệu quả đối với máy tính.C++ là một ngôn ngữ có khả năng thích ứng và có tính mềm dẻo cao Từ khi nó đợc tạo ra năm 1980, nó đã đợc sử dụng rộng rãi với các chơng trình bao gồm cơ sở cho các bộ vi điều khiển, các hệ thống điều hành, các ứng dụng,
và đồ hoạ C++ nhanh chóng trở thành một ngôn ngữ lập trình đợc a chuộng
Có một sự yêu cầu lớn đối với những ngời làm việc với máy tính là họ phải có khả năng yêu cầu làm những công việc mà họ cần, và C++ cho phép họ làm việc nhanh chóng và hiệu quả
Sơ lợc về lịch sử phát triển của C++
Năm 1970 hai nhà lập trình là Brian Kemighan và Dennis Ritchie tạo ra một ngôn ngữ mới đợc gọi là C (Gọi là ngôn ngữ C bởi vì C đứng trớc một ngôn ngữ cũ mà họ sử dụng có tên là B) C đợc thiết kế với một mục đích chủ yếu là: viết hệ thống điều hành Ngôn ngữ này rất đơn giản, mềm dẻo và nó sớm đợc sử dụng rộng rãi cho nhiều dạng chơng trình khác nhau Cuối cùng C
đã nhanh chóng trở thành một trong những ngôn ngữ thông dụng nhất trên thế giới
Tuy nhiên ngôn ngữ C có một vấn đề chính, nó là một ngôn ngữ hớng đối tợng, nghĩa là khi thiết kế một chơng trình C, ngời lập trình bắt đầu với việc mô tả dữ liệu và viết các thủ tục để thao tác với các dữ liệu đó
Cuối cùng những ngời lập trình khám phá ra rằng ngững quá trính trên nó làm cho chơng trình trở lên rõ ràng và dễ hiểu nếu họ có thể đa vào một bunch
dữ liệu và nhóm chúng vào với nhau với các thao tác mà làm việc trên các dữ liệu đó Nh vậy một nhóm đợc gọi là một object (đối tợng) hoặc class (lớp)
Thiết kế các chơng trình bằng cách thiết kế các class đợc biết đến nh thiết kế hớng đối tợng (object-oriented design _ OOD)
Năm 1980 Bjarne Stroustrup bắt đầu làm việc trên một ngôn ngữ mới gọi là
“C với class” Ngôn ngữ này cải tiến từ ngôn ngữ C bằng cách thêm một số đặc
điểm mới, và đặc biệt quan trọng là về class Ngôn ngữ này đợc cải tiến, bổ sung, và cuối cùng nó trở thành C++
C++ với những thành công của nó, trên thực tế là nó cho phép những ngời lập trình tổ chức và xử lý thông tin hiệu quả hơn hầu hết các ngôn ngữ khác Hơn nữa, nó đợc xây dựng trên những việc đã đợc làm với ngôn ngữ C Trên thực tế hầu hết các chơng trình C có thể chuyển đổi sang chơng trình C++ với
Trang 2một chút thay đổi Những chơng trình này thờng không sử dụng hết tất cả những đặc điểm mới của C++, nhng chúng vẫn có thể thực hiện đợc công việc Trong trờng hợp này, C++ cho phép các nhà lập trình xây dựng dựa trên những nền tảng tồn tại của mã của C.
Sự tổ chức của C++
C++ đợc thiết kế nh là một cầu nối giữa những ngời lập trình và máy tính raw ý tởng chính là cho phép ngời lập trình tổ chức một chơng trình theo một cách mà họ có thể dễ dàng hểu đợc chúng Chơng trình dịch sau đó dịch từ ngôn ngữ sang dạng mà máy có thể sử dụng
Các chơng trình máy tính bao gồm hai phần chính là: dữ liệu và các lệnh Các máy tính tác động một chút hoặc không có sự tổ chức(organization) trên hai phần này Sau cùng, các máy tính đợc thiết kế một cách chung nhất có thể
đợc Một ý tởng cho các nhà lập trình là tác động lên tổ chức trên máy tính của
họ và không phải bằng cách khác
Dữ liệu trong máy tính đợc chứa nh một chuỗi bao gồm các byte C++ sử dụng những byte này để chứa các dữ liệu có ích Các khái báo dữ liệu đợc dùng bởi những ngời lập trình để biểu thị thông tin mà họ đang làm việc Ví dụ:
int total; //Total number accounts
Khai báo trên yêu cầu C++ rằng bạn muốn dùng một phần bộ nhớ của máy tính để chứa một số nguyên với tên là total Bạn có thể cho phép chơng trình dịch lựa chọn những byte đặc biệt nào đó của bộ nhớ để sử dụng
Biến total là một biến đơn giản Nó có thể chỉ chứa duy nhất một số nguyên
và miêu tả duy nhất với một total Một chuỗi các số nguyên có thể đợc tổ chức vào trong một mảng Mặt khác, C++ sẽ kết nối các chi tiết, tác động lên (imposing) sự tổ chức trên bộ nhớ của máy tính
int balance[1001; //Balance (in cents) for all 100 accounts
Cuối cùng, có thêm các kiểu dữ liệu phức hợp Ví dụ, một hình chữ nhật có thể có chiều rộng, độ cao, màu và mẫu tô C++ cho phép bạn tổ chức bốn thuộc tính trên vào một nhóm gọi là một cấu trúc (structure).
struct rectangle {
int width; //Width of rectangle in pixels
int height; //Height of rectangle in pixels
color_type color; //color of the rectangle
fill-type fill; //Fill pattern
};
Tuy nhiên, dữ liệu chỉ là một phần của chơng trình, ngoài ra bạn còn cần đến các lệnh Đến mức độ mà máy tính đợc quan tâm, nó không biết một chút gì về cách sắp xếp của các lệnh Nó chỉ biết rằng nó đang làm gì với lệnh hiện tại và tại đâu nó có lệnh kế tiếp
C++ là một ngôn ngữ bậc cao, nó cho phép bạn viết một câu lệnh bậc cao nh:
area = (base*height)/2.0; // Compute area of triangle
Trang 3Chơng trình dịch dịch lệnh này vào một chuỗi các chỉ dẫn (lệnh) của máy Các kiểu lệnh này đợc gọi là một assignment statement Nó đợc sử dụng để tính
và chứa các giá trị của một biểu thức số học
Bạn cũng có thể dùng control statement (lệnh điều khiển) để điều khiển
thứ tự của quá trình xử lý Các lệnh nh if và switch làm cho máy tính tạo các
quyết định dơn giản Các lệnh có thể đợc lặp lại bằng cách dùng vòng lặp nh
while và for.
Các nhóm của các lệnh có thể nằm trong các hàm Vì vậy bạn chỉ cần viết một hàm với mục đích chung để vẽ hình chữ nhật và sau đó có thể sử dụng lại hàm đó những nơi mà bạn muốn vẽ hình chữ nhật C++ cung cấp một bộ phong phú các hàm tiêu chuẩn (standard function) những hàm mà thực hiện
các chức năng thông thờng nh tìm kiếm (searching), phân loại (sorting), nhập vào (input), và đa ra (output)
Một bộ các hàm quan hệ có thể đợc nhóm với nhau để tạo ra các modul, và
các modul đợc nối với nhau tạo thành các chơng trình.
Một trong những mục tiêu chính của ngôn nhữ C++ là tổ chức các lệnh hợp thành các phần để có thể sử dụng lại đợc Cuối cùng, bạn có thể viết một chơng trình nhanh hơn nếu bạn “mợn” hầu hết các mã của bạn ở một nơi nào đó khác Nhóm các modul có khả năng dùng lại có thể kết hợp vào trong một th viện Ví
dụ, nếu bạn cần một bộ sắp xếp thông thờng, bạn có thể dùng các hàm chức năng qsort từ th viện và liên kết nó với chơng trình của bạn
Một máy tính chia thế giới thành dữ liệu và các lệnh Trong cả một thời gian dài, các ngôn ngữ bậc cao nh C vẫn giữ nguyên cách phân chia này Trong ngôn ngữ C, bạn có thể định nghĩa dữ liệu hoặc viết các lệnh nhng không thể kết hợp cả hai
Một sự cải tiến chính trong C++ là ý tởng kết hợp dữ liệu và lệnh lại với nhau trong một cấu trúc gọi là lớp (class) hoặc đối tợng (object) Lập trình h-ớng đối tợng cho phép nhóm dữ liệu với các lệnh thao tác trên dữ liệu đó Khái niệm này đợc nâng lên một bớc nữa trong C++: nó cho phép ta nhận đợc các class mới từ những cái đã tồn tại
Đặc điểm cuối này là một tính năng rất mạnh Nó cho phép bạn xây dựng các class phức tạp từ những class đơn giản hơn, nhỏ hơn Nó cũng cho phép bạn định nghĩa một class trìu tợng (abstract), cơ bản và sau đó tạo ra (derive) các class chi tiết hơn từ các class ban đầu Ví dụ, một class trìu tợng về hình dạng có thể đợc dùng để định nghĩa các hình dạng nh: hình chữ nhật, tam giác, hình tròn
Tổ chức (organization) là một mấu chốt để viết các chơng trình hoàn hảo
Nh trong cuốn sách này, bạn biết rằng bảng nội dung ở đằng trớc, bảng mục lục ở đằng sau, nó là một cách mà các quyển sách đợc tổ chức Tổ chức làm cho quyển sách này sử dụng đợc dễ hơn
Ngôn ngữ C++ cho phép bạn tổ chức các chơng trình của mình dùng cú pháp (syntax) đơn giản mà hiệu quả Cuốn sách này sẽ đi sâu vào cú pháp của C++ và hớng dẫn bạn định kiểu các quy tắc để tạo các chơng trình tin cậy và
dễ đọc Bằng cách kết hợp một cú pháp hiệu quả với kiểu (style) lập trình tốt bạn có thể tạo những chơng trình mạnh thực hện các phép toán phức tạp
Trang 4Cách học ngôn ngữ C++
Chỉ có duy nhất một cách học viết chơng trình là phải viết các chơng trình Bạn sẽ học đợc rất nhiều bằng cách viết và gỡ rối (debugging) các chơng trình hơn là khi mà bạn đã đọc song cuốn sách này (than you ever will by reading this book) Cuốn sách này bao gồm nhiều bài tập về lập trình, và bạn cố gắng làm đợc càng nhiều trong số chúng càng tốt Khi làm các bài tập bạn phải luôn nghĩ đến kiểu chơng trình hoàn hảo nhất, phải luôn luôn chú thích (comment) các chơng trình của bạn, thậm chí cả khi bạn đang làm bài tập đó cho riêng mình Sự chú thích giúp bạn tổ chức các ý tởng của mình, và chú thích các ch-
ơng trình của bạn là một cách luyệnn tập tôt nhất khi bạn đi vào thực tế (“real world”)
Bạn hãy đừng nghĩ rằng, “Tôi chỉ viết những chơng trình này cho riêng mình, vì vậy tôi không cần chú thích chúng.” Trớc tiên, những mã mà bạn thấy rất rõ ràng khi viết, nó có thể thờng rất rối và khó hiểu khi bạn xem lại một tuần sau đó Viết các câu chú thích, nó còn giúp bạn tổ chức các ý tởng của mình (Nừu bạn có thể viết ra một ý tởng bằng tiếng Anh, thì bạn mới chỉ hoàn thành một nửa công việc viết nó bằng C++)
Cuối cùng, các chơng trình có xu hớng xa hơn là chúng ta mong đợi Một lần tôi viết một chơng trình đợc thiết kế chỉ làm việc duy nhất trên một máy tính tại Caltech Chơng trình phụ thuộc vào hệ thống rất cao Bởi vì tôi là ngời duy nhất sẽ dùng chơng trình, chơng trình sẽ in ra một thông báo theo sau nếu tôi có một dòng lệnh sai:
?LSTUIT User is a twit
Vài năm sau đó tôi là một sinh viên tại trờng đại học Syracuse Ngời th ký tại trờng Computer Science cần một chơng trình tơng tự nh chơng trình danh sách của tôi ở Caltech, vì vậy tôi sửa chơng trình của tôi cho cô ta Thật không may, tôi đã quên cái thông báo lỗi nhỏ bé buồn cời đó của tôi
Tởng tợng rằng nó sẽ khủng khiếp nh thế nào khi tôi bớc vào văn phòng của Computer Science và bị hỏi bởi ngời th ký trởng Ngời đàn bà này có nhiều quyền lực đến mức mà bà ta có thể làm cho trởng khoa phải kính nể Cô ta nhìn tôi và nói, “Ngời sử dụng là đần, hả? (User is a twit, huh?)” Rất may mắn là cô ta có tính hài hớc, hoặc ngày nay tôi không ở đây nữa
Rải rắc suốt cuốn sách này là các chơng trình bị “đứt quãng” (“broken”),
và bỏ thời gian để tìm ra tại sao chúng không làm việc Thông thờng những vấn đề này rất đơn giản nh dấu chấm phẩy không đúng chỗ, hoặc dùng = thay cho == Những chơng trình này giúp bạn học cách tìm các lỗi ở các chơng trình nhỏ, từ đó bạn làm tơng tự ở các chơng trình lớn, và bạn sẽ tạo các lỗi, đ-
ợc luyện tập để tìm chúng
Trang 5Chơng 2
Các máy tính là các công cụ mà có thể chứa, tổ chức và xử lý một lợng lớn thông tin Tuy nhiên chúng không thể làm đợc bất cứ cái gì khi mà ai đó cha đ-
a cho chúng những lệnh chi tiết
Thông tin với các máy tính không dễ dàng Nó yêu cầu các lệnh chính xác
và chi tiết Cuộc sống có dễ dàng hơn không nếu chúng ta có thể viết chơng trình bằng tiếng Anh? Tiếp theo chúng ta yêu cầu máy tính, “Thêm vào tất cả các kiểm tra và các deposit của tôi và nói với tôi toàn bộ,” và máy sẽ cân bằng (balancce) các kiểm tra của chúng ta (checkbook)
Nhng tiêng Anh là một ngôn ngữ rất hạn chế nếu bạn phải viết các câu lệnh chính xác Ngôn ngữ hoàn toàn không rõ nghĩa và không chính xác Grace Hopper, một bà nổi tiếng về tính toán (computing), một lần bình luận về các chỉ dẫn ở hộp dầu gội đầu:
Chính vì vậy, có một nhóm ngời tập trung thời gian cố gắng viết tiếng Anh chính xác Họ đợc gọi là chính phủ, và các văn bản họ viết đợc gọi là quy định của chính phủ Một cách đáng tiếc, trong sự cố gắng để làm cho các quy định chính xác, chính phủ đã làm cho các văn bản hầu hết rất khó đọc Nếu bạn đã từng đọc quyển hớng dẫn kèm theo với biểu thuế của bạn, thì bạn sẽ thấy đợc tiếng Anh chính xác sẽ nh thế nào
Thậm chí, ngay cả với những phụ từ không cần thiết mà chính phủ thêm vào thì các vấn đề có thể xảy ra Một vài năm trớc đây, California thông qua
điều luật yêu cầu tất cả những ngời đi xe máy phải đeo mũ bảo hiểm Ngay sau
đó điều luật này có hiệu lực, một cảnh sát dừng một ngời không đeo mũ bảo hiểm lại, ngời đàn ông đề nghị cảnh sát xem kỹ hơn điều luật
Điều luật có hai điểm: 1) Ngời đi xe máy phải có mũ bảo hiểm đợc xác nhận là chống đợc va chạm và 2) Nó phải đợc thít một cách chắc chắn Ngời cảnh sát không thể phạt anh ta khi mà anh ta có mang mũ và thít chắc chắn vào
đầu gối
Vì những vấn đề hạn chế đó của tiếng Anh, nên nó không thể trở thành một ngôn ngữ máy tính đợc Vậy bây giờ chúng ta sẽ trao đổi thông tin với máy tính nh thế nào?
Các máy tính đầu tiên trị giá hàng triệu dollar, trong khi cùng thời gian đó thì lơng của một ngời lập trình thành thạo (good) là 15,000 dollar một năm Các nhà lập trình bắt buộc phải viết chơng trình bằng một ngôn ngữ mà tất cả
Trang 6các lệnh đợc chuyển thành chuỗi các con số, gọi là ngôn ngữ máy Ngôn ngữ này có thể đa trực tiếp vào trong máy tính Một kiểu chơng trình ngôn ngữ máy
có dạng nh sau:
1010 1111
0011 0111
0111 0110
…và tiếp tục nh vậy cho hàng trăm lệnh
Trong khi máy “nghĩ” với các con số mà con ngời không thể Để lập trình với các máy tính cổ này, các kỹ s phần mềm đã phải viết ra những chơng trình của họ, sử dụng một ngôn ngữ đơn giản, một ngôn ngữ mà mỗi từ sẽ đặc trng (stand for) cho một lệnh đơn Nó đợc gọi là ngôn ngữ assembly, bởi vì những
ngời lập trình phải dịch bằng tay, hoặc tổ hợp (assemble) mỗi dòng ra mã máy Một kiểu chơng trình ngôn ngữ assembly có thể giống nh sau:
Program Translation
MOV A,47 1010 1111
ADD A,B 0011 0111
HALT 0111 0110
…và tiếp tục nh vậy cho hàng trăn lệnh
Quá trình này đợc minh hoạ bằng hình 2.1
Hình 2-1
Quá trình dịch là một nhiệm vụ buồn tẻ và chán ngắt, nó đòi hỏi phải kiên trì Một kỹ s phần mềm đã xét thấy đây là công việc hoàn chỉnh cho một máy tính, vì vậy anh ta viết một chơng trình thực hiện công việc này một cách tự
động, nó đợc gọi là assambler
Anh ta trình bày sáng tạo mới này lên ông chủ và ngay lập tức bị ca cẩm
“Anh dám nghĩ ngay cả việc sử dụng một chiếc máy đắt nh vậy cho một nhiệm
vụ thuộc văn phòng?” Đa ra trị giá thời gian một tiếng của máy tính để đổi lại trị giá thời gian một tiếng của ngời lập trình, điều này không phải là một quan
điểm không có lý
Assembly
language
Assembly (translation)
Machine LanguageProgram
Trang 7May thay, thời gian qua đi thì giá trị của ngời lập trình đợc tăng lên và giá trị của máy tính giảm đi Vì vậy nó sẽ mang lại hiệu quả hơn khi các nhà lập trình viết các chơng trình bằng ngôn ngữ assembly và sử dụng một chơng trình gọi là assembler để dịch chơng trình đó ra ngôn ngữ máy.
Ngôn ngữ assembly tổ chức chơng trình theo một cách mà các ngời lập trình dễ hiểu hơn Tuy nhiên, máy sẽ khó khăn hơn khi sử dụng chơng trình này Chơng trình phải đợc dịch trớc khi máy có thể thực hiện chúng Đây là sự khởi đầu cho một xu hớng Các ngôn ngữ lập trình ngày càng trở lên thuận tiện hơn cho những ngời lập trình sử dụng và nó cũng bắt đầu yêu cầu ngày càng nhiều thời gian của máy tính để dịch chúng ra dạng mà các máy tính có thể sử dụng
Qua hàng năm các ngôn ngữ bậc cao đã đợc phát minh ra Những ngôn
ngữ này cố gắng để cho những ngời lập trình viết ra những chơng trình mà họ
dễ dàng hiểu đợc và nó cũng đủ rõ ràng và đơn giản để các máy tính có thể hiểu
Các ngôn ngữ bậc cao ban đầu đợc thiết kế để xử lý (handle) các kiểu đặc trng của các ứng dụng FORTRAN đợc thiết kế dùng cho kỹ thuật, COBOL, để viết các báo cáo thơng mại, và PASCAL dùng cho sinh viên (Số lớn trong những ngôn ngữ này phát triển lớn hơn là khi nó đợc sử dụng ban đầu Nh có
đồn đại rằng Nicklaus Wirth đã nói, “Nếu tôi biết rằng PASCAL trở lên thành công nh vậy, thì tôi đã cẩn thận hơn khi thiết kế chúng.”)
Sau đó, Brian Kemighan và Dennis Ritchie phát triển ngôn ngữ C và Bjarne Stroustrup chuyển nó thành C++
Các chơng trình từ khái niệm đến thực hiện
Các chơng trình C++ đợc viết bằng ngôn ngữ bậc cao sử dụng các chữ cái, các chữ số, và các biểu tợng khác mà bạn thấy trên bàn phím Trên thực tế máy tính thực hiện một ngôn ngữ bậc rất thấp gọi là macbine code (một chuỗi các
con số) Vì vậy, trớc khi một chơng trình có thể đợc sử dụng, nó phải qua một vài sự biến đổi
Các chơng trình đợc xuất phát nh là một ý tởng trong đầu của nhà lập trình Anh ta viết những ý tởng của mình bằng một trình soạn thảo (text editor) trong
một file gọi là file nguồn (sourcefile) hoặc mã nguồn (source code) File này
đ-ợc biến đổi bằng một trình biên dịch (compiler) ra một file đối tợng
(objectfile) Tiếp theo một chơng trình gọi là trình liên kết (linker) đa các file
đối tợng này, kết hợp nó với các thủ tục đợc định nghĩa trớc từ th viện tiêu chuẩn (standard library), và tạo một chơng trình có thể thực hiện đợc (một bộ
các lệnh của ngôn ngữ máy) Trong các phần tiếp theo, bạn sẽ thấy đợc những dạng khác nhau làm việc với nhau để tạo một chơng trình cuối cùng
Hình 2-2 đa ra những bớc mà bắt buộc phải thực hiện để chuyển đổi một chơng trình viết bằng ngôn ngữ bậc cao ra một chơng trình mà có thể thực hiện
đợc
Trang 8Hình 2-2 Sự chuyển đổi của một ngôn ngữ bậc cao ra chơng trình
Wrappers
Rất may mắn là bạn không phải chạy bản thân chơng trình biên dịch, assembler, trình liên kết Hầu hết các trình biên dịch C++ dùng các chơng trình wrapper“ ”, chơng trình mà xác định những công cụ nào cần thiết để chạy nối tiếp nhau
Một số hệ thống lập trình thậm chí còn đi xa hơn và cung cấp cho những ngời lập trình một môi trờng phát triển khép kín (IDE-integrated development environment) IDE bao gồm một trình soạn thảo, trình biên dịch, trình liên kết quản lý project, trình gỡ rối
and more in one convenient package
Cả Borland và Microsoft cùng cung cấp các IDE với các trình biên dịch của họ
Mã bậc cao
Chương trình ngôn ngữ assembly Trình biên dịch
Mã đối tượng
Trình liên kết
Chương trình có khả
năng thực hiện Assembler
Thư viện
Trang 9lệnh Nói một cách khác, bạn gõ một lệnh và trình biên dịch chuyển từ mã nguồn của bạn thành một chơng trình có thể thực hiện đợc Một kiểu trình biên dịch khác đợc chứa trong một IDE.
Hầu hết các hệ thống UNIX dùng các trình biên dịch gõ dòng lệnh Một vài trình biên dịch kiểu IDE sẵn có cho UNIX, nhng nó rất ít Mặt khác, hầu hết các trình biên dịch sử dụng với MS-Dos và Windows chứa một môi trờng phát triển khép kín
For command-line die-hards, these compilers do contain command-line compilers as well
Tạo một chơng trình
dùng một trình biên dịch dòng lệnh
Trong phần này bạn sẽ xem xét kỹ từng bớc một quá trình cần thiết để tạo một chơng trình dùng một trình biên dịch dòng lệnh Chỉ dẫn đợc đa ra cho sử dụng một một trình biên dịch UNIX chung, trình biên dịch Free Software Foundation's g++, Turbo-C++, Borland C++, và Microsoft Visual C++
Tuy nhiên, nếu bạn đang sử dụng một chơng trình dịch Borland hoặc Microsoft bạn có thể muốn nhảy đến đoạn dùng IDE
However, if you are using a Borland or Microsoft compiler, you might want to skip ahead to the section on using the IDE
Bớc 1:
Nó rất dễ dàng quản lý nếu bạn tạo một th mục riêng cho mỗi chơng trình
mà bạn đang làm việc Trong trờng hợp này bạn sẽ tạo một th mục hello để chứa chơng trình hello của bạn
Trang 10Những ngời sử dụng MS-DOS/Windows không nên sử dụng chơng trình
xử lý word nh Microsoft Word hoặc WordPerfect để viết chong trình của mình Các chơng trình xử lý word thêm vào file các mã tạo dạng làm xáo trộ trình biên dịch Bạn phải sử dụng trình soạn thảo văn bản nh trình soạn thảo MS-DOS vì những trình soạn thảo này có khả năng soạn thảo các file ASCII
Bớc 3: Chạy trình biên dịch
Trình biên dịch chuyển đổi file nguồn bạn vừa tạo ra chơng trình có thể
th-ợc hiện đth-ợc Mỗi trình biên dịch có một dòng lệnh khác nhau Các dòng lệnh cho hầu hết các trình biên dịch phổ biến đợc liệt kê dới đây
Hầu hết các trình biên dịch UNIx-based theo một tiêu chuẩn chung giống nhau Trình biên dịch C++ đợc gọi là cc Để dịch chơng trình hello, chúng ta phải cần lệnh sau:
% CC -g -ohello hello.cc
Trong đó, chọn –g tạo khả năng gỡ rối (Trình biên dịch thêm các thông tin phụ vào chơng trình để làm cho chúng gỡ rối đợc dễ hơn.) Thay đổi –hello nói với trình biên dịch rằng chơng trình đợc gọi là hello, và cuối cùng hello.cc là tên của file nguồn Xem sổ tay trình biên dịch của bạn cho các chi tiết với tất cả các lựa chọn có thể Có một số trình biên dịch C++ khác nhau cho UNIX, vì vậy dòng lệnh của bạn có thể khác chút ít
Free Software Foundation's g++ Compiler
The Free Software Foundation, the GNU people, publishes a number of highquality programs (See the glossary entry "Free Software Foundation" for information on how to get their software.) Among their offerings is a C++ compiler called g++
Để dịch một chơng trình dùng trình biên dịch g++, dùng dòng lệnh sau:
% g++ -g -Wall -ohello hello.cc
Thêm vào thay đổi -Wall bật lên tất cả các cảnh báo
Borland's Turbo C++ in MS-DOS
Hãng quốc tế Borland tạo một trình biên dịch low-cost MA-DOS C++ gọi
là Turbo-C++ Trình biên dịch này rất lý tởng để học Dòng lệnh cho Turbo-C++ là:
C:> tcc -ml -v -N -P -w -ehello hello.cpp
Thông số –ml yêu cầu Turbo-C++ để dùng mô hình bộ nhớ rộng (Máy PC này có rất nhiều mô hình bộ nhớ khác nhau có thể đợc dùng khi tạo các chơng trình Cuốn sách này sẽ không nói về những bộ nhớ này Thay vì thế, chúng ta
có quan điểm, “Sử dụng mô hình bộ nhớ rộng và không phải lo nghĩ gì cho đến khi bạn trở thành chuyên gia lập trình.”)
Thay đổi –v nói với Turbo-C đa thông tin gỡ rối vào chơng trình Cảnh báo đợc bật lên với –w, kiểm tra ngăn xếp bằng –N Trên thực tế trình biên dịch sẽ dịch cả C và C++ We force a C++ compile using the -P switch Cuối cùng, -ehello nói với Turbo-C++ để tạo một chơng trình có tên là hello, và
hello.ccp là tên của file nguồn Xem sổ tay tham khảo Turbo-C++ để có danh sách hoàn chỉnh các lựa chọn
Trang 11Borland C++ in MS-DOS and Window
Cùng với Turbo-C++, hãng quốc tế Borland cũng tạo một trình biên dịch chuyên gia hoàn hảo cho MS-DOS/Windows gọi là Borland C++ Dòng lệnh của nó là:
C:> bcc -ml -v -N -P -w -ehello hello.cpp
Các lựa chọn dòng lệnh trong Turbo-C++ và Borland C++ là giống nhau
Microsoft Visual C++
Microsoft Visual C++ là một trình biên dịch khác cho MS-DOS/Windows
Nó không mạnh và hoàn hảo nh là bản tơng ứng Borland của nó Nhng nó sẽ dịch hầu hết các chơng trình trong cuốn sách này (Version 1.5 fails to handle templates and exceptions.) Để dịch, dùng dòng lệnh sau:
Chọn /AL yêu cầu máy tính dùng mô hình bộ nhớ rộng Gỡ rối đợc bật lên với lựa chọn /Zi và cảnh báo với lựa chọn /W1
và kết hợp chúng trong một khối ngăn lắp cho nhà lập trình
Since development environments tend to change, the particular version you use may require slightly different keystrokes
Bớc 1:
Nó rất dễ dàng quản lý nếu bạn tạo một th mục riêng cho mỗi chơng trình
mà bạn đang làm việc Trong trờng hợp này bạn sẽ tạo một th mục HELLO để chứa chơng trình hello của bạn
Trong MS-DOS
C: MKDIR HELLO
C: CD HELLO
Bớc 2: gõ, dịch và chạy chơng trình của bạn
Mỗi IDE khác nhau một chút, vì vậy chúng ta xét đến các lệnh riêng biệt cho mỗi loại:
Turbo-C++
1 khởi động Turbo-C IDE với dòng lệnh:
C: TC
Trang 122 Dùng các lệnh Options/Compiler/Code Generation để lấy ra hộp hội thoại Code Generation, nh trên hình 2-3 Đổi mô hình nhớ (model memory) về dạng rộng.
3 Dùng các lệnh Option/Compiler Entry/Exit để bật kiểm tra ngăn xếp,
nh trong hình 2-4
Hình 2-3 Hộp hội thoại Code Generation
Hình 2-4 Hộp hội thoại Entry/Exit Code Generation
4 Sử dụng lệnh Option/Compiler/Messages/Display để hiện ra hộp hội thoại Compiler Messages nh ở hình 2-5 Chọn All để hiện lên tất cả các cảnh báo
5 Sử dụng lệnh Option/Save để nghi tất cả các lựa chọn bạn đã dùng
Trang 13Hình 2-5 Hộp hội thoại Conpiler Messages
6 Dùng hộp hội thoại Open Project File để chọn một file project Trong ờng hợp này, file project của bạn có tên là HELLO.PRJ Màn hình nên có dạng
tr-giống nh hình 2-6 khi bạn kết thúc
Hình 2-6 Hộp hội thoại Open Project File
7 Nhấn phím Insert để cộng một file vào project File mà bạn muốn cộng
là HELLO.CCP nh trên hình 2-7.
Trang 14Hình 2-7 Hộp hội thoại Add to Project List
8 Nhấn ESC để thoát ra khoải vòng “cộng file”
9 Nhấn phím mũi lên để nhẩy qua một dòng Dòng với hello.cpp bây giờ
đ-ợc sáng lên nh hình 2-8
Hình 2-8 "Hello" project
10 Nhấn Return để soạn thảo file này
11 Gõ vào những mã sau:
Trang 15Hình 2-9 Kết thúc project
12 Sử dụng lệnh Run/Run để thực hiện chơng trình
13 Sau khi chơn trình chạy, điều khiển quay về IDE Điều này có nghĩa là bạn không thể xem kết quả chơng trình của mình Để xem nó bạn phải chuyển
về màn hình ngời sử dụng bằng cách sử dụng lệnh Windows/User
Nhấn một phím bất kỳ nó sẽ trả bạn về màn hình IDE Hình 2-10 hiển thị kết quả đa ra của chơng trình
14 Khi kết thúc, bạn có thể ghi chơng trình của mình với lệnh File/Save
15 Để thoát khỏi IDE, dùng lệnh File/Quit
Hình 2-10 User screen
Trang 16Borland C++
1 Tạo một th mục HELLO để chứa các file cho chơng trình hello của chúng
ta Bạn có thể tạo th mục bằng cách sử dụng chơng trình quản lý file của Windows hoặc gõ dòng lệnh sau tại dấu nhắc của MS-DOS:
5 Nhấn nút OK để quay về hội thoại New Target
6 Nhấn Alt-F10 để hiển thị menu phụ nh trong hình 2-14
7 Chọn Edit Node Attributes để hiển thị hội thoại nh trong hình 2-15 Trong ô trống Style Sheet, chọn mục "Debug Info and Diagnostics." Nhấn OK để trở lại cửa sổ chính
Hình 2-11 Màn hình chính của Borland C++
Trang 17H×nh 2-12 Hép héi tho¹i New Target
H×nh 2-13 Hép héi tho¹i Advenced Options
Trang 18H×nh 2-14 Menu phô Target Options
H×nh 2-15 Hép héi tho¹i Node Attributes
Trang 198 Vào phần hội thoại Project Optión bằng cách chọn mục Options/Project Options Nhẩy xuống mục Compiler và nhấn lên dấu "+" để mở rộng các mục chọn.
Quay về phần chọn kiểm tra tràn ô nhớ nh trong hình 2-16 Nhấn OK để ghi các lựa chọn này
9 Chọn OK để quay về cửa sổ chính Nhấn phím mũi tên xuống để chọn mục hello[.cpp] trong project (xem trong hình 2-17)
10 Nhấn Return để bắt đầu soạn thảo file hello.cpp Gõ các mã dới đây:
Khi kết thúc, màn hình của bạn giống nh hình 2-18
11 Dịch và chạy chơng trình bằng cách chọn mục menu Debug/Run
Ch-ơng trình sẽ chạy và hiển thị “Hello World” trong cửa sổ nh biểu diễn trong hình 2-19
Hình 2-16 Hôp hội thoại Project Options
Trang 20H×nh 2-17 Hello Project
Trang 21Hình 2-18 Chơng trình "Hello World"
Hình 2-19 "Hello World" sau khi thực hiện
Microsoft Visual C++
1 Tạo một th mục HELLO để chứa các file cho chơng trình hello của chúng
ta Bạn có thể tạo th mục bằng cách sử dụng chơng trình quản lý file của Windows hoặc gõ dòng lệnh sau tại dấu nhắc của MS-DOS:
Trang 224 Visual C++ vào hội thoại cho phép bạn đặt tên các file nguồn trong project này (xem hình 2-22) Trong trờng hợp này chúng ta chỉ có file hello.cpp Nhấn vào Add để gõ vào tên trong project và nhấn Close để xác nhận với Visual C++ rằng không có thêm file nào nữa trong chơng trình.
5 Chọn Options/Project Options để hiển thị hội thoại Project Options nh trong hình 2-23
Nhấn lên nút Compiler để thay đổi các lựa chọn trình biên dịch
6 Nhẩy xuống mục Custom Options trong Category và thay đổi mức độ cảnh báo thành 4 nh trong hình 2-24
7 Thay đổi loại (category) Memory Model và thay đổi mô hình bộ nhớ về
Kết quả, nên giống nh trong hình 2-26
10 Dùng mục menu File/Save As để ghi các file với tên là hello.cpp
11 Dùng lệnh Project/Build để biên dịch chơng trình Trình biên dịch đa ra các thông báo nh nó tạo lên Khi nó kết thúc, màn hình của bạn nên trông giống nh trong hình 2-27
12 Chơng trình bây giờ có thể đợc bắt đầu với lệnh Dedug/Go Các kết quả xuất hiện nh trong hình 2-28
Gọi Help trong UNIX
Hầu hết các hệ thống UNIX có hệ thống cung cấp tài liệu trực tuyến đợc gọi là "man pages" Các hệ thống này có thể đợc truy nhập đến bằng lệnh man (UNIX dùng man nh sự viết tắt của "manual.") Để có thông tin về các chủ đề